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。纯虚拟析构函数*”在这里特别相关。) –