我开发了一个不同账户的编制银行系统。我的基类是Account,派生类是Checking,Savings,MoneyMarket。后三者从Account继承私有成员变量'balance'。所有四个帐户都需要维护和修改自己的“余额”。
但是,我对账户余额与派生类的“余额”之间的关系感到困惑。
正如您在Checking的getBalance()中所看到的,由于私有变量,它被强制使用Account的getBalance(),并且代码仅在显示Account :: balance时才有效。这似乎很奇怪,它应该调用帐户的余额来显示它自己的。
请注意,所有Account的公共方法都是虚拟的,以允许覆盖。
为什么它按原样运行?派生类不应该调用自己的“余额”副本吗?
注意:此代码可以正常显示每个对象的修改后的平衡。 以下是Checking.cpp:
#include <iostream>
#include <iomanip>
#include "Checking.h"
using namespace std;
Checking::Checking() {setBalance(500); }
Checking::~Checking() {setBalance(0);}
void Checking::Withdrawal(double p_withdrawal){
setBalance( getBalance(0) - p_withdrawal);
cout << setprecision(2) << fixed;
cout<<"\nWithdrawal from Checking leaves balance: "<<getBalance(0);
}
double Checking::getBalance(bool print){
if (print==1)
cout<<"\nBalance of Checking:"<< Account::getBalance(0);
return Account::getBalance(1);
}
对于Account.h:
#ifndef ACCOUNT_H
#define ACCOUNT_H
using namespace std;
class Account{
public:
Account();
~Account();
virtual double getBalance(bool);
virtual void setBalance(double);
virtual void Deposit(double);
virtual void Withdrawal(double);
virtual void Transfer(Account&, Account&, double);
private:
double balance;
};
#endif
答案 0 :(得分:1)
private
表示无法从其定义的类范围外访问,即使在子类中也是如此,如果要在子类中直接访问balance
,请将其protected
private
。
另请注意,继承(至少public
继承)意味着您的子类是来自外部世界的父类,可用作父级类。因此,没有&#34;副本&#34;在您的子类中balance
,每个实例中只有一个balance
。 balance
字段属于Account
类,无论此类是否通过继承扩展,都不会更改。
逻辑是:Checking
是一个Account
(从类的角度来看),Account
有一个balance
,因此Checking
有一个balance
balance
。由privately
的{{1}}部分控制的Account
只有一个Checking
。