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

时间:2016-11-26 11:53:22

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

我有3个班级,A,B和C:

class A
{
/// Some Code
};

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

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

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

1 个答案:

答案 0 :(得分:2)

如果您将类作为基类使用,如示例代码中所示,它们应该具有虚拟析构函数。并且因为析构函数是一种方法,所以你可以将它作为一个纯虚拟(" abstract")析构函数来使类本身"抽象"。

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

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 ++中抽象类的全部目的是定义接口,除非定义了构成该接口的方法,否则不能有接口。要么我不够聪明,要么你应该重新考虑你的设计。