我有3个班级,A,B和C:
class A
{
/// Some Code
};
class B : public A
{
/// Some Code
};
class c : public B
{
/// Some Code
};
我想创建A类和B类抽象类以防止创建它们的实例,但这两个类都没有抽象方法。有没有办法让类抽象,即使它没有抽象方法?
答案 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 ++中抽象类的全部目的是定义接口,除非定义了构成该接口的方法,否则不能有接口。要么我不够聪明,要么你应该重新考虑你的设计。