如果您无法下载资料,请参考说明:
1、部分资料下载需要金币,请确保您的账户上有足够的金币
2、已购买过的文档,再次下载不重复扣费
3、资料包下载后请先用软件解压,在使用对应软件打开
实验八多态—虚函数实验目的:学习为什么要使用虚函数。学习如何声明函数为虚函数。学习如何声明异类数组(类型为基类指针,指针分别指向不同的子类对象)。学习如何使用虚函数和异类数组实现多态调用。实验内容(与实验六相同):创建一个银行账户的继承层次,表示银行的所有客户账户。所有的客户都能在他们的银行账户存钱,取钱,但是账户也可以分成更具体的类型。例如,一方面存款账户SavingsAccount依靠存款生利,另一方面支票账户CheckingAccount对每笔交易(即存款或取款)收取费用。创建一个类层次,以Account作为基类,SavingsAccount和CheckingAccount作为派生类。基类Account应该包括一个double类型的数据成员balance,表示账户的余额。该类应当提供三个成员函数。成员函数credit可以向当前余额加钱;成员函数debit负责从账户中取钱,并且保证账户不会被透支。如果提取金额大于账户金额,函数将保持balance不变,并打印信息“Debitamountexceededaccountbalance”;成员函数getBalance则返回当前balance的值。派生类SavingsAccount不仅继承了基类Account的功能,而且还应提供一个附加的double类型数据成员interestrate表示这个账户的比率(百分比)。SavingsAccount的构造函数应接受初始余额值和初始利率值,还应提供一个public成员函数calculateInterest,返回代表账户的利息的一个double值,这个值是balance和interestrate的乘积。注意:类SavingsAccount应继承成员函数credit和debit,不需要重新定义。派生类CheckingAccount不仅继承了基类Account的功能,还应提供一个附加的double类型数据成员表示每笔交易的费用。CheckingAccount的构造函数应接受初始余额值和交易费用值。类CheckingAccount需要重新定义成员函数credit和debit,当每笔交易完成时,从balance中减去每笔交易的费用。重新定义这些函数时应分别使用基类Account的相关函数来执行账户余额的更新。CheckingAccount的debit函数只有当钱被成功提取时(即提取金额不超过账户余额时)才应收取交易费。提示:定义Account的debit函数使它返回一个bool类型值,表示钱是否被成功提取。然后利用该值决定是否需要扣除交易费。如果取款或存款后,账户的余额小于每笔交易的费用,则废弃这次交易,使账户余额恢复到取款或存款之前的值,并打印“Transactionfeeexceededaccountbalancewhiledebiting”或“Transactionfeeexceededaccountbalancewhilecrediting”。实验要求:要求将每个类的定义和实现分开在不同的文件里,并严格按照上述名称定义成员变量和成员函数,所有类的成员变量均定义为private的。当这个继承层次中的类定义完毕后,编写一个主程序,能够多态地调用不同账户的成员函数。主函数代码:intmain(){Account*accounts[3];accounts[0]=newSavingsAccount(100,3);//余额100元,利息3%accounts[1]=newCheckingAccount(100,5);//余额100元,交易费5元accounts[2]=newCheckingAccount(50,5);//余额50元,交易费5元for(inti=0;i<3;i++){cout<<"\n第"<<i+1<<"次循环的结果"<<endl;accounts[i]->debit(200);accounts[i]->debit(40);accounts[i]->credit(50);accounts[i]->debit(49);accounts[i]->debit(43);accounts[i]->credit(1);SavingsAccount*derivedPtr=dynamic_cast<SavingsAccount*>(accounts[i]);if(derivedPtr!=0)derivedPtr->credit(derivedPtr->calculateInterest());cout<<fixed<<setprecision(2);cout<<"账户的余额为:"<<accounts[i]->getB