#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
本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文链接,否则保留追究法律责任的权利。