c++ - 从同一个基类派生的两个派生类有不同的结果?
问题描述
两个派生类具有从同一类派生的相同逻辑但结果不同。
我有一个名为的基类account
和两个来自account
名为savings_account
and的类的派生类checking_account
。当我制作savings_account
对象时,一切正常,但是当我制作类对象时checking_account
,它也会创建一个空对象account
类。通过使用重载运算符 <<, cout << checking_account_object
,它为我提供了checking_account_object
. 但是当我使用方法时,它给了我(我创建但自动创建)get_balance
的平衡。与方法类似,它将钱存入,而不是。我已经在这段代码中停留了 2 天。account_object
checking_Account_object
account_object
deposit
account_object
checking_account_object
这是我的account
课程代码:
class account
{
protected:
string name;
double balance;
public:
friend ostream & operator << (ostream &out, account &bank);
account(){
name = "unknown";
balance = 0.00;
}
account (const string &person_name, const double &person_balance){
name = person_name;
balance = person_balance;
}
bool deposit(const double &amount){
if(amount <= 0)
return false;
else{
balance += amount;
return true;
}
}
bool withdraw(const double &amount){
if(amount <= 0 )
return false;
else{
balance -= amount;
return true;
}
}
double getbalance(){
return balance;
}
};
ostream & operator << (ostream &out, account &bank){
out << "The back balance of " << bank.name << " is " << bank.balance << endl;
return out;
}
这是我的代码savings_account
:
class savings_account : public account
{
protected:
string name;
double balance;
double int_rate;
public:
savings_account(){
int_rate = 0;
name = "unknown";
balance = 0;
}
savings_account(const string &person_name, const double &person_balance, const double peronal_int_rate){
int_rate = peronal_int_rate;
name = person_name;
balance = person_balance;
}
bool deposit(double amount){
amount += (amount*int_rate)/100;
return account::deposit(amount);
}
friend ostream & operator << (ostream &out, savings_account &bank);
};
ostream & operator << (ostream &out, savings_account &bank){
out << "The bank balance of " << bank.name << " is " << bank.balance << endl;
return out;
}
这是checing_account
类:
class checking_account : public account{
protected:
string name;
double balance;
const double fee = 1.5;
public:
checking_account(){
name = "unknown";
balance = 0;
}
checking_account(const string &person_name, const double &personal_balance){
name = person_name;
balance = personal_balance;
}
bool withdraw(double amount){
amount = amount + fee;
return account::withdraw(amount);
}
friend ostream & operator << (ostream &out, checking_account &bank);
};
ostream & operator << (ostream &out, checking_account &bank){
out << "The name of account is " << bank.name << " and current balance is " << bank.balance << endl;
return out;
}
main()
功能:
int main(){
savings_account savings_account("tanzeel", 2000, 2);
savings_account.deposit(1000);
cout << savings_account.getbalance() << endl;
savings_account.withdraw(100);
cout << savings_account.getbalance() << endl;
cout << savings_account;
checking_account checking_account_object("tanzeel", 100.0);
checking_account_object.deposit(50);;
checking_account_object.withdraw(100);
cout << checking_account_object.getbalance() << endl;
cout << checking_account_object;
return 0;
}
Savings_account
运作良好。但checking_account
没有给我所需的输出。我期望的输出checking_account_object
是
48.5
The name of account is tanzeel and current balance is 48.5
但输出为 -51.5 账户名称为 tanzeel,当前余额为 100
解决方案
推荐阅读
- javascript - 如何解决 Uncaught TypeError: Cannot convert undefined or null to object
- css - CSS网格区域属性没有响应
- dask - dask.delayed对象的分布和计算
- ocr - ocr - 光学字符识别图像尺寸/质量下降
- java - 在摇摆中显示 JTable 中的旧值
- javascript - 使用 multer+angular 6 的“假路径”问题
- javascript - vanilla javascript:拦截输入键并更改键值
- css - 无法在 VS Code 中链接我的 CSS Bootstrap 文件
- android - RecyclerView 在 AlertDialog 框中不可见
- php - 将表数据插入数据库