Есть ли способ написать класс такой, что ни один класс не может быть унаследован от него? - PullRequest
1 голос
/ 15 октября 2010

По ссылке http://www.coolinterview.com/interview/10842/

Можно ли написать класс таким образом, чтобы от него не унаследовался какой-либо класс?

Из предложений, приведенных в приведенной выше ссылке, я попробовал приведенный ниже код

class A
{
    A(){}
    ~A(){}
    A(const A&);
    A& operator=(const A&);
};

class B: public A
{
};

Приведенный выше код не вызывает ошибок.Если я пытаюсь создать экземпляр B, как показано ниже

int main()
{
    B ob;
}

, тогда выдается ошибка

ошибка C2248: «A :: A»: невозможно получить доступ к закрытому члену, объявленному в классе «A»

Таким образом, наследование его разрешает, но создание экземпляров его не позволяет.

Есть ли другой способ заблокировать само наследование?

Ответы [ 2 ]

0 голосов
/ 15 октября 2010

Нет эквивалента ключевому слову final в Java или C♯ sealed в C ++. Конечно, вы можете предотвратить наследование, сделав конструкторы классов закрытыми или перейдя по ссылке liaK и имея подкласс класса, который имеет частные конструкторы и является его другом.

В общем, хотя:

Вы можете просто сделать свой деструктор не виртуальным, чтобы сигнализировать, что вы не собираетесь, чтобы класс был полиморфным, и документировать, что это ваше намерение. Конечно, если пользователи вашего класса решат проигнорировать это, они могут столкнуться с собственными проблемами для своего высокомерия. ;)

Дополнительно: http://www.parashift.com/c++-faq-lite/strange-inheritance.html#faq-23.11

0 голосов
/ 15 октября 2010

Не через явное ключевое слово.В некоторых языках есть «запечатанное» ключевое слово или подобное, которое делает именно это, но не C ++.

Это можно сделать (см. Этот полезный комментарий от liaK), но это действительно неудобно, вам придетсядействительно хорошая причина хотеть сделать это.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...