суббота, 13 апреля 2013 г.

Запрет наследования в С++

Во многих современных языках программирования есть возможность объявить класс наследование от которого запрещено. В C# такие классы помечаются ключевым словом sealed, в Java - final. При попытке скомпилировать код с наследованием от таких классов приведет к ошибке компилятора.
А возможно ли такое же в C++?
Ответ: ДА!
Каким же образом создать такой класс на C++? Сразу хочу предупредить, что игры с конструкторами и деструкторами ни к чему не приведут... Сам я потратил не один час пытаясь такой класс написать)
Но все оказалось очень просто: достаточно скрыть в private части деструктор! Вот пример такого класса на C++:

class Sealed
{
private:
   ~Sealed() {}
};

Теперь при попытке написать класс наследник и скомпилировать код вы получите ошибку, гласящую, что невозможно создать класс наследник от класса содержащего закрытый деструктор! Вот так легко и без введения дополнительных ключевых слов удается реализовать поставленную задачу!

Комментариев нет:

Отправить комментарий