本章所有编程练习的工程源码可在此处下载(点击此链接下载),供大家参考交流!
1.为复习题5描述的类提供方法定义,并编写一个小程序来演示所有的特性。
复习题5是要求定义一个类来表示银行账户,存储的数据成员包括储户姓名、账号和存款;然后成员函数执行以下操作:
- 创建一个对象并将其初始化;
- 显示储户姓名、账号和存款;
- 存入参数指定的存款;
- 取出参数指定的款项;
所以首先我们需要创建一个类,私有变量包括储户姓名(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
接下来就要进行函数定义了。头文件中已经把默认构造函数的函数定义给出了,所以我们只需要对剩下的三