2012-01-10 96 views
4

我想用C++做一個抽象類,但有一些默認實現。 ,這樣每個繼承它的類都將具有默認行爲,但不能創建基類的實例。 但如果我將foo標記爲純虛擬的,我不能將實現添加到它。有一些實現的C++抽象類

class Base 
{ 
public: 
    virtual void foo() =0; //Now I can't add foo implementation 
}; 

我的解決辦法是不把它作爲一個純粹的虛擬,只是隱藏的構造。 我想知道如果它可能標記類是純的,但仍然有一些實現?

+4

什麼,確切地說,「我的解決方案是不把它作爲一個純粹的虛擬,只是隱藏構造函數」是錯誤的?這聽起來非常合理。 – 2012-01-10 07:54:25

+1

爲純虛函數提供實現沒有任何問題。但我同意詹姆斯的觀點,你的最初想法可能是最好的。 – 2012-01-10 07:55:37

+0

使用私有構造函數可能是要走的路。或者如果你有一個C++ 11編譯器,你可以將構造函數標記爲[deleted](http://en.wikipedia.org/wiki/C++11#Explicitly_defaulted_and_deleted_special_member_functions)。 – 2012-01-10 07:55:55

回答