C++ Primer Plus(第六版)编程练习答案 第10章 对象和类

本文详细介绍了《C++ Primer Plus(第六版)》第10章的编程练习,包括银行账户类、Person类、golf类、Sales类的实现,以及Stack类、Move类、Plorg类和List类的设计与应用。每个类的实现包含了构造函数、成员函数的定义,并提供了测试代码以验证类的功能。文章还提供了所有编程练习的源码下载链接,供读者参考和学习。
摘要由CSDN通过智能技术生成

本章所有编程练习的工程源码可在此处下载(点击此链接下载),供大家参考交流!

 

1.为复习题5描述的类提供方法定义,并编写一个小程序来演示所有的特性。

 

复习题5是要求定义一个类来表示银行账户,存储的数据成员包括储户姓名、账号和存款;然后成员函数执行以下操作:

  1. 创建一个对象并将其初始化;
  2. 显示储户姓名、账号和存款;
  3. 存入参数指定的存款;
  4. 取出参数指定的款项;

所以首先我们需要创建一个类,私有变量包括储户姓名(char数组或string对象),账号(char数组或string对象),存款(double变量);而公有成员方面,则是执行操作的成员函数,首先有一个初始化函数完成第一个操作,其次有一个显示函数进行内容的显示,然后有一个存款函数完成存入存款的操作,最后还有一个取款函数完成取出存款的操作。

所以我们的头文件中只需要包括这样一个类即可,于是bank.h代码如下所示:

// bank.h -- head file

#ifndef BANK_H_
#define BANK_H_
#include <string>

class BankAccount
{
private:
    std::string name;
    std::string acctnum;
    double balance;
public:
    BankAccount(const std::string & client, const std::string & num, double bal = 0.0);
    void show(void) const;
    void deposit(double cash);
    void withdraw(double cash);
};

#endif

其中BankAccount()函数是一个构造函数,专门用于初始化,因为这里没有说到默认初始化的情况,所以没有写默认构造函数。

在以上的头文件的基础上,我们首先需要写一个源代码文件,来给头文件的那么多成员函数进行函数定义。

首先对于BankAccount()函数,就只是一个构造函数,所有的私有变量都通过参数传递了,那么函数内部就只需要进行赋值即可;

其次对于show()函数,目的就是对一整个类的私有成员变量进行显示即可,所以只需要一句cout即可;

然后对于deposit()函数,传入的参数是希望存入的存款数值,在这里其实需要注意存入的一定是一个正值,所以首先进行一个判断,是正值再进行存入操作,如果是负数就直接输出“输入失败”的提示;如果是正值,我们就将原存款加上新存入的数值,然后显示一下存入新存款之后的存款数值;

最后对于withdraw()函数,同样的需要判断输入的数值的正负,负数直接输出“输入失败”,正数则将原有存款减去取出的数值,然后显示取出之后的存款数目;

这样我们的所有成员函数就都解决了,bank.cpp代码如下所示:

// bank.cpp -- containing all the member functions

#include "stdafx.h"
#include <iostream>
#include "bank.h"

BankAccount::BankAccount(const std::string & client, const std::string & num, double bal)
{
    name = client;
    acctnum = num;
    balance = bal;
}

void BankAccount::show(void) const
{
    std::cout << "The name of bank account is " << name << ", the account number is " << acctnum << ", now it has balance $" << balance << std::endl;
}

void BankAccount::deposit(double cash)
{
    if (cash > 0)
    {
        balance += cash;
        std::cout << "$" << cash << " cash added.\n";
    }
    else
    {
        std::cout << "Input fail.\n";
    }
}

void BankAccount::withdraw(double cash)
{
    if (cash > 0)
    {
        balance -= cash;
        std::cout << "$" << cash << " cash withdrawed.\n";
    }
    else
    {
        std::cout << "Input fail.\n";
    }
}

接下来我们对创建的类和成员函数进行检验。首先,我们要保证能够初始化,而且不是默认初始化,而是我们自己输入银行账户信息来进行初始化;接下来输入结束之后要能够进行账户信息的显示;然后就是自主操作了,对于一个银行账户来说,能够进行的操作主要就是存款和取款了,另外在这里我还加入了一个退出的功能;为了区别这几个功能,使用标志位进行区别,不同的字母代表不同的功能。

另外,对于此处的储户姓名和账号,我使用的是string对象,因为使用string对象就避免了使用数组,这样对于输入的长度不需要使用new或者规定长度,个人感觉要更方便一点。

于是usebank.cpp代码如下所示:

// usebank.cpp -- check the class and all the functions

#include "stdafx.h"
#include <iostream>
#include "bank.h"
#include <string>

int main()
{
    using namespace std;
    cout << "Please enter your information for operation:\n";
    string client;
    string num;
    double bal;
    cout << "Your name: ";
    getline(cin, client);
    cout << "Your account number: ";
    cin >> num;
    cout << "Your balance: ";
    cin >> bal;
    BankAccount myaccount(client, num, bal);
    myaccount.show();
    char flag;
    double cash;
    cout << "Please choose what you want, d for deposit, w for withdraw, q to quit: ";
    cin >> flag;
    while (flag != 'q')
    {
        if (flag == 'd')
        {
            cout << "Please input the deposit amount: ";
            cin >> cash;
            myaccount.deposit(cash);
            myaccount.show();
        }
        else if (flag == 'w')
        {
            cout << "Please input the withdraw amount: ";
            cin >> cash;
            myaccount.withdraw(cash);
            myaccount.show();
        }
        else
            break;
        cout << "Please choose what you want, d for deposit, w for withdraw, q to quit: ";
        cin >> flag;
    }
    cout << "Bye\n";
    system("Pause");
    return 0;
}

运行结果如下图所示:

 

2. 下面是一个非常简单的类定义:

(……代码省略……)

它使用了一个string对象和一个字符数组,让您能够比较它们的用法。请提供未定义的方法的代码,以完成这个类的实现。再编写一个使用这个类的程序,它使用了三种可能的构造函数调用(没有参数、一个参数和两个参数)以及两种显示方法。下面是一个使用这些构造函数和方法的例子:

Person one;                                     // use default constructor

Person two("Smythecraft");             // use #2 with one default argument

Person three(:Dimwiddy", "Sam");  // use #2, no defaults

one.Show();

cout << endl;

one.FormalShow();

// etc. for two and three

 

本题题中直接给出了类定义,有三个私有成员变量,四个公有成员函数,其中一个默认构造函数,定义已经给定,然后一个构造函数,让用户自己输入初始化的内容,剩下两个显示函数,都没有输入参数,只是显示的姓名方式不同。

头文件题中已给出,person.h代码如下所示:

// person.h -- head file, containing the class definition

#ifndef PERSON_H_
#define PERSON_H_
#include <string>

class Person
{
private:
    static const int LIMIT = 25;
    std::string lname;
    char fname[LIMIT];
public:
    Person() { lname = ""; fname[0] = '\0'; }
    Person(const std::string & ln, const char * fn = "Heyyou");
    void Show() const;
    void FormalShow() const;
};

#endif

接下来就要进行函数定义了。头文件中已经把默认构造函数的函数定义给出了,所以我们只需要对剩下的三

评论 12
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值