c++ - 创建一个没有抽象方法的抽象类

标签 c++ inheritance abstract-class virtual-functions pure-virtual

我有 3 个类(class),A、B 和 C:

class A
{
/// Some Code
};

class B : public A
{
/// Some Code
};

class c : public B
{
/// Some Code
};

我想将 A 类和 B 类创建为抽象类,以防止创建它们的实例,但这两个类都没有抽象方法。有没有办法使类抽象,即使它没有抽象方法?

最佳答案

如果您使用这些类作为基类(如示例代码所示),那么它们应该具有虚拟析构函数。因为析构函数是一种方法,所以您可以将其设为纯虚拟(“抽象”)析构函数,以使类本身变得“抽象”。

请注意,仍然可以为纯虚方法提供实现,因此您可以使用以下代码:

class A
{
  public:
    virtual ~A() = 0; 

/// Some Code
};

class B : public A
{
  public:
    virtual ~B() = 0;

/// Some Code
};

class C : public B
{
  public:
    virtual ~C() = 0;

/// Some Code
};
A::~A()  { }
B::~B()  { }
C::~C()  { }

由于销毁对象时始终会调用基类析构函数,因此无需在派生类的析构函数中显式调用基类实现。

这应该会给你带来想要的效果。然而,我目前正在努力为这个设计想出一个引人注目的应用程序。 C++ 中抽象类的全部目的是定义一个接口(interface),除非定义了组成该接口(interface)的方法,否则您不能拥有接口(interface)。要么我不够聪明,要么你应该重新考虑你的设计。

关于c++ - 创建一个没有抽象方法的抽象类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40818051/

相关文章:

c++ - 匿名 union 中类成员的初始化

c++ - 设置视频捕获属性不再适用于 OpenCV 2.2?

c++ - 如何为每个派生类存储一个可以从基类访问的魔数(Magic Number)?

c++ - 使用抽象指针调用派生类函数

c++ - 库位于计算机的哪个位置?

c++ - 我如何在 C++ 中将 vector 序列化为 char,以便轻松使用 mongodb 作为后端

java - 如何传递祖 parent 对象来调用父方法

java - 如果我在 package1 中有带有 protected 方法的基类

java - 如何将抽象类转换为接口(interface)?

angular - 在 typescript 中定义抽象类的类型