制作一个无法实例化的类?

spa*_*ger 1 c++ oop inheritance class c++11

假设我有一个类Bar。我想Bar唯一地用作基类,例如:

class Foo : public Bar
Run Code Online (Sandbox Code Playgroud)

我想禁止Bar能够被实例化。换句话说,我想Bar object;成为一个错误。这是可能的吗?

eer*_*ika 6

有可能的。您本质上是在问,如何创建一个抽象类。

在其他一些语言中,有一个说明符关键字可用于声明类抽象,但在 C++ 中没有。在 C++ 中,如果一个类至少有一个纯虚成员函数,那么它就是抽象的。

几乎总是,抽象类自然有一个纯虚函数供派生类实现,但如果你的基类没有,有一个技巧:将抽象类的析构函数声明为纯虚函数。

附注。请注意,与其他纯虚函数不同,析构函数必须始终有一个定义。

  • @πάνταῥεῖ 不会阻止子类将父类的实例构造为非基子对象。现在,我不知道为什么这很重要,但这就是我所理解的要求。 (4认同)
  • “受保护”构造函数? (2认同)