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