2011-08-28 52 views
1
class ClassA { 
public: 
    ClassA() {} // when this function must be provided 
    virtual ~ClassA() = 0 {} 
}; 

class ClassB : public ClassA 
{ 
    // ...   
}; 

我想知道何時必須提供抽象基類的默認構造函數。定義抽象基類的默認構造函數

+1

我不認爲是一個基本的抽象類與它有任何關係。所以我猜測答案會是「無論何時通常需要」,比如當你需要能夠構建你的類時,無論有沒有參數。 –

+1

你也不能在純虛擬函數('= 0 {}')上擁有一個主體。 –

+1

@Seth Carnegie:[其實,你可以擁有一個純虛擬功能的機構](http://www.gotw.ca/gotw/031.htm)。 (這個部分叫做「* 1。純虛擬析構函數*」在這裏特別相關。) –

回答

2

在提供默認構造函數和類的抽象性之間沒有聯繫。

如果您需要初始化事物,則會提供默認的構造函數定義。

如果要禁止默認構造,則提供(可能未實現的)非公開聲明。

歡呼&第h。,

2

如果它確實是一個抽象基類,沒有數據成員,編譯器生成的構造將在每一種情況下完全足夠的。

派生類將始終調用默認的基類構造函數,除非它們的構造函數在初始化程序列表中指定了其他構造函數。

+0

對於沒有數據成員的非抽象類,你是否會說這也是這種情況(反正同樣程度)? –