使用基类的方法使用继承类的静态成员变量......可能吗?

时间:2015-10-19 19:56:27

标签: c++ class static inherited

基类:

libpthread

为简单起见,我遗漏了无关的成员/方法等。

所以,在这种情况下: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; } 应该与CheckingAccount的行为相同,但它应该具有不同的APR(利率)。所有SavingsAccount共享相同的SavingsAccounts,所有APR共享自己的CheckingAccounts(因此变量是静态的)。这是一个赋值,我们应该使用APR的静态成员变量。

从我的研究和测试中,我似乎找不到覆盖APR类中的AddInterest()方法以使其使用CheckingAccount的方法。如果是这种情况,那么CheckingAccount::APR中的大多数方法都必须被覆盖,因为许多方法都使用SavingsAccount,这似乎会破坏学习继承类的能力。

我错过了什么吗?

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会修改CheckingAccountAPR个对象!这对我来说很有意义,因为SavingsAccount是静态的,但我不确定最佳解决方案是什么。

1 个答案:

答案 0 :(得分: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;
}