基类和派生类私有成员变量用法

时间:2014-08-21 13:56:45

标签: c++ class copy private base

我开发了一个不同账户的编制银行系统。我的基类是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 

1 个答案:

答案 0 :(得分:1)

private表示无法从其定义的类范围外访问,即使在子类中也是如此,如果要在子类中直接访问balance,请将其protected private

另请注意,继承(至少public继承)意味着您的子类是来自外部世界的父类,可用作父级类。因此,没有&#34;副本&#34;在您的子类中balance,每个实例中只有一个balancebalance字段属于Account类,无论此类是否通过继承扩展,都不会更改。

逻辑是:Checking是一个Account(从类的角度来看),Account有一个balance,因此Checking有一个balance balance。由privately的{​​{1}}部分控制的Account只有一个Checking