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

Can I define a constructor in an abstract base class?

想用C++写一个"interface"class,纯虚抽象基class。

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

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

一题实际上有2道题:

  • A​​BC可以有ctor吗?:当然可以!假设您有一个几乎完整的 class,其中包含私有数据,并且只缺少一种具体方法。此方法应该是纯虚拟的,使 class 抽象,但您仍然必须在 ctor 中初始化 class 数据。 question suggested by Paul Rooney 就是一个例子
  • 接口可以有一个构造函数吗?:不,它不能根据定义。接口是一种特殊的 ABC,它只包含纯虚方法。它没有实现,甚至连部分实现都没有,因此不需要构造函数。你已经注意到

A constructor cannot be a purely virtual function

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

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

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