我可以在抽象基类中定义构造函数吗?

时间:2016-01-28 07:56:39

标签: c++ abc

我想在C ++中编写一个“接口”类,它是一个纯粹的虚拟抽象基类。

我可以在这个接口类中定义构造函数吗?构造函数不能是纯虚函数,但是如何为接口类定义构造函数?

编辑:我是否需要在这样的接口类中使用虚拟析构函数?

2 个答案:

答案 0 :(得分:3)

实际上有两个问题在一个:

  • ABC可以有一个ctor吗?:当然可以!想象一下,你有一个几乎完整的类,私有数据,只缺少一个具体的方法。这个方法应该是纯虚拟的,使类抽象,但你仍然需要在ctor中初始化类数据。 question suggested by Paul Rooney就是一个例子
  • 接口可以有ctor吗?:不,它不能定义。接口是一个特殊的ABC,只包含纯虚方法。它没有实现甚至不是部分实现,因此不需要ctor。你已经注意到了
  

构造函数不能是纯虚函数

TL / DR:如果您尝试将构造函数添加到接口,那么它不再是一个接口,而是一个完全允许拥有一个的简单抽象基类。

答案 1 :(得分:0)

C ++没有接口的概念。有具体的类和抽象类,仅此而已。允许抽象类具有构造函数,数据成员和其他所有内容。标记类抽象所需的唯一内容是单个纯虚拟成员函数。

有些人使用"界面"表示没有任何数据成员或非纯虚拟成员函数的抽象类。其他人使用略有不同的定义。就语言而言,确切的定义没有任何意义。您可以拥有数据成员并定义构造函数,并仍然将您的类称为接口,没有人会向您发出引用。或者你可以完全避免这个词。