Коэффициенты, если вы используете классы в качестве базовых классов, как показано в примере кода, они должны иметь виртуальные деструкторы. И поскольку деструктор - это метод, вы можете сделать это чистым виртуальным («абстрактным») деструктором, чтобы сделать сам класс «абстрактным».
Обратите внимание, что реализация все еще может быть предусмотрена для чистого виртуального метода, так что вы можете использовать следующий код:
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++ заключается в определении интерфейса , и вы не можете иметь интерфейс, если только не определены методы, которые составляют этот интерфейс. Либо я просто недостаточно умный, или вы должны переосмыслить свой дизайн.
Создайте чистый виртуальный деструктор. Или разрешить только защищенные конструкторы. –
Скорее всего, вам не нужно наследование классов вообще. Вместо этого рассмотрите отношения HAS-A. –