2015-04-03 248 views
0

我有一個抽象基類。假設我希望派生類也是抽象的,並將純虛函數的實現職責留給更低的類。做這件事的最好方法是什麼?抽象基類的抽象子類

class Animal { 
public: 
    virtual void makeNoise() = 0; 
}; 

class Dog : public Animal { 
}; 

是更好地留空這個樣子,或者我應該做的:

class Dog : public Animal { 
public: 
    virtual void makeNoise() = 0; 

}; 

或者怎麼樣忽略了虛擬關鍵字:

class Dog : public Animal { 
public: 
    void makeNoise() = 0; 
}; 

什麼是最合適的這樣做的方法?

+0

「狗」類應該是抽象類嗎? – 2015-04-03 20:28:12

+0

@JoachimPileborg:是的。 – 2015-04-03 20:29:28

+0

有人說過耦合嗎? – 2015-04-03 20:30:44

回答

2

有不同的選擇之間沒有功能上的差異(如你不改變無障礙),但

  • 我寧願選擇一個,因爲它避免了重複代碼。
  • 選項3是最糟糕的可能性,因爲 - 儘管顯而易見的是純虛函數(由=0表示)是虛擬的 - 它與在Dog中引入的其他(純)虛函數的聲明不太一致。
  • 如果

    • Dog是你發給其他人庫
    • 它引入了新的純虛函數本身的一部分,我只恢復選項2。
    • Animal本身是不應該被進一步使用的「典型用戶」直接

    這樣一來,從Dog派生具有哪些功能他在一個地方採取一切必要信息的客戶。