2011-08-28 85 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

对于没有数据成员的非抽象类,你是否会说这也是这种情况(反正同样程度)? –