class ClassA {
public:
ClassA() {} // when this function must be provided
virtual ~ClassA() = 0 {}
};
class ClassB : public ClassA
{
// ...
};
我想知道何時必須提供抽象基類的默認構造函數。定義抽象基類的默認構造函數
class ClassA {
public:
ClassA() {} // when this function must be provided
virtual ~ClassA() = 0 {}
};
class ClassB : public ClassA
{
// ...
};
我想知道何時必須提供抽象基類的默認構造函數。定義抽象基類的默認構造函數
在提供默認構造函數和類的抽象性之間沒有聯繫。
如果您需要初始化事物,則會提供默認的構造函數定義。
如果要禁止默認構造,則提供(可能未實現的)非公開聲明。
歡呼&第h。,
如果它確實是一個抽象基類,沒有數據成員,編譯器生成的構造將在每一種情況下完全足夠的。
派生類將始終調用默認的基類構造函數,除非它們的構造函數在初始化程序列表中指定了其他構造函數。
對於沒有數據成員的非抽象類,你是否會說這也是這種情況(反正同樣程度)? –
我不認爲是一個基本的抽象類與它有任何關係。所以我猜測答案會是「無論何時通常需要」,比如當你需要能夠構建你的類時,無論有沒有參數。 –
你也不能在純虛擬函數('= 0 {}')上擁有一個主體。 –
@Seth Carnegie:[其實,你可以擁有一個純虛擬功能的機構](http://www.gotw.ca/gotw/031.htm)。 (這個部分叫做「* 1。純虛擬析構函數*」在這裏特別相關。) –