1

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

我可以在这个接口类中定义构造函数吗?构造函数不能是纯粹的虚函数,但是我怎样才能为接口类定义构造函数呢?

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

4

2 回答 2

3

实际上有两个问题合二为一:

  • ABC可以有演员吗?: 当然可以!想象一下,您有一个几乎完整的类,带有私有数据,并且只缺少一个具体方法。这个方法应该是纯虚拟的,使类抽象,但您仍然必须在 ctor 中初始化类数据。保罗鲁尼提出的问题就是一个例子
  • 接口可以有一个ctor吗?: 不,根据定义它不能。接口是一种特殊的 ABC,它只包含纯虚方法。它没有实现,甚至没有部分实现,因此不需要 ctor。你已经注意到了

构造函数不能是纯虚函数

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

于 2016-01-28T08:16:19.567 回答
0

C++ 没有接口的概念。有具体类和抽象类,仅此而已。抽象类可以有构造函数、数据成员和其他一切。唯一需要标记类抽象的是单个纯虚成员函数。

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

于 2016-01-28T08:25:55.577 回答