2011-04-30 156 views
0

我有一個名爲bankAccount的基類中稱爲餘額的私有數據成員。我想我的派生類checkingAccount能夠使用餘額,所以我使它受到保護,但我注意到,即使將它放在我的基類的私有部分中,我的派生類似乎仍能夠訪問餘額。我認爲這是不可能的?有誰知道可能會發生什麼?基類的私有數據成員如何被派生類訪問?

基類:

class bankAccount 
    { 
     public: 
     bankAccount(); 
     void setAccountInfo(int accountNumTemp, double balanceTemp); 
     void applyTransaction(char accountType, char transactionTypeTemp, int amountTemp, int j); 

     private: 
     int accountNumber; 
     double balance; 
    }; 

派生類:

class checkingAccount: public bankAccount 
{ 
    public: 
    checkingAccount(); 
    double applyTransaction(char transactionTypeTemp, int amountTemp, int c, double balance); 

    private: 
    float interestRate; 
    int minimumBalance; 
    float serviceCharge; 

}; 

基類功能構件,其中所述派生類功能部件接收所討論的數據成員:

void bankAccount:: applyTransaction(char accountType, char transactionTypeTemp, int amountTemp, int j) 
{ 
    int c; 
    c = j; 

    checkingAccount ca; 

      balance = ca.applyTransaction(transactionTypeTemp, amountTemp, c, balance); 
} 

派生類功能部件,在使用基類的私有數據成員:

double checkingAccount:: applyTransaction(char transactionTypeTemp, int amountTemp, int c, double balance) 
{ 
    if (transactionTypeTemp == 'D') 
     { 
      balance = balance + amountTemp; 
     } 
    else if (transactionTypeTemp == 'W') 
     { 
      if (balance < amountTemp) 
      { 
      cout << "error: transaction number " << c + 1 << " never occured due to insufficent funds." << endl; 
      } 
      else 
      { 
       balance = balance - amountTemp; 
       if(balance < minimumBalance) //if last transaction brought the balance below minimum balance 
       { 
        balance = (balance - serviceCharge); //apply service charge 
       } 
      } 
     } 

     return balance; 
} 
+1

**不要從沒有虛擬析構函數的基類派生**請。 – 2011-04-30 20:39:34

+0

哦,請不要將財務數據作爲浮點值存儲在實際應用程序中。舍入誤差肯定會蒸發或創造金錢。 – 2011-04-30 20:50:44

回答

2

checkingAccount::applyTransaction沒有看到或碰到基類的balance成員。它正在使用,重置並返回自己的balance參數。

+0

這也是我首先想到的,但是,我的輸出表明在派生函數中執行了一些操作的餘額值與基類餘額值相同 – darko 2011-04-30 20:43:53

+0

@Matt:您在那裏調用'applyTransaction'在'checkingAccount'上通過一個指向/ bankAccount的引用? – 2011-04-30 20:46:37

+0

所以我想這個問題是,新的平衡如何獲得作爲舊平衡的價值? – darko 2011-04-30 20:49:16

2

balance在這方面是第四參數的函數(checkingAccount:: applyTransaction);它不是bankAccount的數據成員。

+0

這也是我首先想到的,但是,我的輸出表明在派生函數中執行了某些操作的餘額值與基類餘額值相同 – darko 2011-04-30 20:43:23

+0

@Matt您正在更新私有成員變量在完成applyTransaction之後進行平衡,所以一旦完成,它當然是一樣的。你是否在applyTransaction中說它改變了? – MerickOWA 2011-04-30 20:50:43

+0

即時消息說新的​​餘額的價值與舊的餘額的價值相同。如果沒有初始化,新的餘額的值不應該是內存中的任何值嗎? – darko 2011-04-30 20:52:20

相關問題