1

基类:

class SavingsAccount
{
public:
    void AddInterest();  // add interest to balance based on APR (interest rate)
private:
    static double APR;
    double Balance;
}

class CheckingAccount: public SavingsAccount
{
private:
    static double APR;
}

为简单起见,我省略了不相关的成员/方法等。

所以,情况是这样的: aCheckingAccount应该和 a 一样SavingsAccount,但是它应该有不同的 APR(利率)。所有SavingsAccounts共享相同APR并且都CheckingAccounts共享自己的APR(因此变量是静态的)。这是一个赋值,我们应该为APRs 使用静态成员变量。

从我的研究和测试来看,我似乎找不到任何方法来覆盖类中的AddInterest()方法CheckingAccount以使其使用CheckingAccount::APR。如果是这种情况,则SavingsAccount必须重写 from 的大多数方法,因为许多方法使用APR,这似乎扼杀了学习继承类的意义。

我错过了什么吗?

方法,AddInterest()供参考:

SavingsAccount::AddInterest()
{
    double interest = (this->APR/100)/12 * this->getBalance();
    this->setBalance(this->getBalance() + interest);
}

编辑:我遇到的原始问题(在覆盖 APR 之前CheckingAccount)如下:

int main()
{
    SavingsAccount sav;
    CheckingAccount chk;

    sav.setAPR(0.2);
    chk.setAPR(0.1);

    cout << sav.getAPR() << endl;  // OUTPUTS "0.1"!!

    return 0;
}

修改对象的APR 会CheckingAccount修改对象的 APR !这对我来说很有意义,因为它是静态的,但我不确定最好的解决方案是什么。APRSavingsAccountAPR

4

1 回答 1

3

我会建议一个不同的类层次结构:

class Account {};
class SavingsAccount : public Account {};
class CheckingAccount : public Account {};

然后,将virtual成员函数添加到Account

virtual double getAPR() = 0;

然后,Account::AddInterest()使用getAPR().

class Account
{
   public:

      virtual ~Account() {}

      // Add other functions as needed
      // ...

      void AddInterest()
      {
         // Implement using getAPR()
         double interest = (this->APR/100)/12 * this->getBalance();
         this->setBalance(this->getBalance() + interest);
      }
      virtual double getAPR() = 0;

   private:
      double Balance;
};

class SavingsAccount : public Account
{
   public:
      virtual double getAPR() { return APR; }
   private:
      static double APR;
}

class CheckingAccount : public Account
{
   public:
      virtual double getAPR() { return APR; }
   private:
      static double APR;
}
于 2015-10-19T20:05:37.603 回答