




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、使用习题12.10中创建的Account类层次结构开发一个具有多态性的银行系统程序。创建一个Account指针的vector对象,其中的指针指向SavingsAccount 对象和CheckingAccount对象。对于该vector对象中每个Account ,允许用户使用成员函数debit指定要从Account取出的货币金额,并允许用户使用成员函数credit指定要存入该Account的货币金额。处理每个Account时,应判定它的类型。如果Account是SavingsAccount,就使用成员函数,就使用成员函数calculateInterest计算该Account应得的利息,然后使用成
2、员函数credit把利息加到帐户余额上。处理完一个Account后,通过调用基类成员函数getBalance打印更新后的帐户余额。Account.h#ifndef ACCOUNT_H#define ACCOUNT_Hclass Accountpublic:Account( double = 0 );virtual bool credit( double );virtual bool debit( double );virtual double getBalance()return balance;private:double balance;#endifAccount.cpp#include
3、<iostream>using std:endl;using std:cout;#include "Account.h"Account:Account( double YuE )if( YuE >= 0 )balance = YuE;elsebalance = 0;cout << "Unvalid input! Balance is setted to 0! " << endl; / 不合要求输出提示信息bool Account:credit( double deposit ) / 存钱cout <<
4、 "you are crediting or get interest " << deposit << " yuan" << endl;if( deposit >= 0 )balance += deposit;return true;elsecout << "Wrong deposit! You can't deposit less than 0 yuan! " / 不合要求输出提示信息return false;bool Account:debit( double with
5、draw ) / 取钱cout << "you are debiting or paying the fee charged for this transaction " << withdraw << " yuan" << endl;if ( withdraw >= 0 && withdraw <= balance )balance -= withdraw;return true;elsecout << "Debit amount exceeded acco
6、unt balance, or you wrongly withdraw less than 0 yuan!" / 不合要求输出提示信息return false;SavingAccount.h#ifndef SAVINGACCOUNT_H#define SAVINGACCOUNT_H#include "Account.h"class SavingAccount:public Accountpublic:SavingAccount( double = 0, double = 0 );double calculateInterest() / 计算利息return in
7、terestrate * getBalance();private:double interestrate;#endifSavingAccount.cpp#include <iostream>using std:endl;using std:cout;#include "SavingAccount.h"SavingAccount:SavingAccount( double YuE, double LiLv ):Account( YuE ) / 为基类中的数据成员初始化if( LiLv >= 0 && LiLv <= 1 )intere
8、strate = LiLv;elseinterestrate = 0;cout << "Unvalid input! Interestrate is setted to 0! " << endl; / 不合要求输出提示信息cout << "saving interestrate is " << interestrate << endl;CheckingAccount.h#ifndef CHECKINGACCOUNT_H#define CHECKINGACCOUNT_H#include "
9、;Account.h"class CheckingAccount:public Accountpublic:CheckingAccount( double = 0, double = 0 );virtual bool credit( double );virtual bool debit( double );private:double feechargedpertransaction;#endifCheckingAccount.cpp#include <iostream>using std:endl;using std:cout;#include "Check
10、ingAccount.h"CheckingAccount:CheckingAccount( double YuE, double JiaoYiFei ) / 构造函数初始化余额和交易额:Account( YuE )if( JiaoYiFei >= 0 )feechargedpertransaction = JiaoYiFei;elsefeechargedpertransaction = 0;cout << "Unvalid input! Feechargedpertransaction is setted to 0! " << end
11、l; / 不合要求输出提示信息cout << "fee charged for per transaction is " << feechargedpertransaction << endl;bool CheckingAccount:credit( double deposit ) / 存钱交易if( Account:credit( deposit ) = true ) / 收取交易费相当于取钱Account:debit( feechargedpertransaction );return true;elsecout <<
12、"Trade Faided! " << endl;return false;bool CheckingAccount:debit( double withdraw ) / 取钱交易if ( Account:debit( withdraw ) = true )Account:debit( feechargedpertransaction ); / 同理 收取交易费相当于取钱return true;elsecout << "Trade Faided!" << endl;return false;test_Account.c
13、pp#include <iostream>using std:endl;using std:cout;using std:cin;#include <vector>using std:vector;#include <typeinfo>#include "Account.h"#include "SavingAccount.h"#include "CheckingAccount.h"void virtualViaPointer( Account * const, SavingAccount &
14、, CheckingAccount & );/用户通过此自定义函数进行交易int main()/初始化各个账户Account account( 2000.0 ); SavingAccount saving( 2000,0.1);CheckingAccount checking( 5000, 2 );vector < Account * > accounts(3);/用vector指针指向各个账户accounts0 = &account;accounts1 = &saving;accounts2 = &checking;for(int i = 0; i
15、 < 3; i+) /每个账户轮流执行交易virtualViaPointer( accountsi, saving, checking );return 0;void virtualViaPointer( Account * const baseClassPtr , SavingAccount & s, CheckingAccount & c)int t = 1, n;/通过比较是否指向同一个地址判断账户的类型是否相同if( baseClassPtr = &s )cout << "nis SavingAccountn"cout &l
16、t;< "SavingAccount before operation is " << baseClassPtr->getBalance() << endl;else if( baseClassPtr = &c )cout << "nis CheckingAccountn"cout << "CheckingAccount before operation is " << baseClassPtr->getBalance() << endl
17、;elsecout <<"nis Accountn"cout << "Account before operation is " << baseClassPtr->getBalance() << endl;while( t = 1 | t = 2 )cout << "n请选择服务:1:存款 2:取款 其他键:退卡. " << endl;cin >> t;switch(t)case 1: cout << "请输入存款数:&qu
18、ot;cin >> n;cout << endl;baseClassPtr->credit( n );if( baseClassPtr = &s )SavingAccount *savingPtr = (SavingAccount*)baseClassPtr;/向下强制类型转换 来调用派生类中有而基类没有的函数baseClassPtr->credit( savingPtr->calculateInterest() );break;case 2: cout << "请输入取款数:"cin >> n;cout << endl;baseClassPtr->debit( n );break;default: cout << "you suc
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 第三十一课 我能行教学设计-2025-2026学年小学心理健康北师大版四年级下册-北师大版
- 第二章 生物的遗传与变异教学设计-2025-2026学年初中生物学人教版八年级下册-人教版
- 蒸汽系统知识培训课件
- 2025-2026学年地质版(2024)小学体育与健康二年级全一册《我从哪里来》教学设计
- 2025年人教版八年级英语上册同步讲义Unit1 SectionA【含答案解析】
- 常州教师考试音乐题目及答案
- 2025评估合作协议
- 昌乐一中去年考试试卷及答案
- 向量求系数题目及答案
- 岑溪二中期中考试卷子及答案
- GB/T 18947-2003矿用钢丝增强液压软管及软管组合件
- GB/T 13527.1-1992软聚氯乙烯管(流体输送用)
- 法律合规网络知识竞赛试题汇总
- 声纳培训教材课件
- 车辆维修项目投标方案
- 女生青春期生理健康教育
- 2022年成都隆科城乡发展集团有限公司招聘笔试试题及答案解析
- 物业公司水电费收费表
- 商场撤场申请书
- 教育评价学全套ppt课件完整版教学教程
- 基础有机化学:第2章 饱和烃
评论
0/150
提交评论