#include <bits/stdc++.h> using namespace std; class Account { private: double balance; public: Account(double balance = 0) {balance=balance;} virtual double credit(double creFee = 0) { balance += creFee; return balance; } virtual double debit(double deFee = 0){ if (balance >= deFee){ balance -= deFee; } else{ cout<<"Debit amount exceeded account balance."<<endl; } return balance; }; double setBalance(double balance = 0){ this -> balance = balance; return balance; } double getBalance(){ return balance; } }; class SavingsAccount : public Account { public: SavingsAccount(double balance = 0 ,double interestRate = 0){ this -> interestRate = interestRate; setBalance(balance); } double calculateInterest() { return getBalance() * interestRate * 0.01; } private: double interestRate; }; class CheckingAccount : public Account { public: CheckingAccount(double balance = 0, double fee = 0){ this -> fee = fee; setBalance(balance); } double credit(double creFee = 0) { if(getBalance() + creFee - fee >= 0) setBalance(getBalance() + creFee - fee); else cout << "Transaction fee exceeded account balance while debiting." << endl; return 0; } double debit(double deFee = 0) { if(getBalance() - deFee - fee >= 0){ setBalance(getBalance() - deFee - fee); } else{ cout<<"Debit amount exceeded account balance."<<endl; } return 0; } private: double fee; }; int main() { Account *accounts[3]; accounts[0] = new SavingsAccount(100, 3); //余额100元,利息3% accounts[1] = new CheckingAccount(100, 5); //余额100元,交易费5元 accounts[2] = new CheckingAccount(50, 5); //余额50元,交易费5元 for (int i = 0; i < 3; i++) { cout << "第" << i + 1 << "次循环的结果:" << endl; accounts[i]->debit(200); //借款200元 accounts[i]->debit(40); accounts[i]->credit(50); //存款50元 accounts[i]->debit(49); accounts[i]->debit(43); accounts[i]->credit(1); //将Account指针强制转换为SavingAccount指针 SavingsAccount *derivedPtr = dynamic_cast<SavingsAccount *>(accounts[i]); if(derivedPtr != NULL) //如果类型兼容,转换成功 derivedPtr->credit(derivedPtr->calculateInterest()); cout << fixed << setprecision(2); //使用定点数格式,2位小数部分 cout << "账户的余额为:" << accounts[i]->getBalance() << endl; } }
实验九
作者:LightAc
出处:https://www.cnblogs.com/lightac/
联系:
Email: dzz@stu.ouc.edu.cn
QQ: 1171613053
本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文链接,否则保留追究法律责任的权利。