8 октября 2008 г.

Задачи на собеседованиях: наследование в C++

Очередной вопрос с собеседования, который часто спрашивают.

У нас есть некая иерархия классов. Нам нужно запретить наследование от какого-то класса. В Java для этого есть специальное ключевое слово final, но в C++ такого слова нет. Попытка наследования от финального класса должна пресекаться на этапе компиляции.

4 комментария:

  1. точно не помню, но по моему приватный деструктор нужен =)

    ОтветитьУдалить
  2. Да, в общем-то правильно.

    Лично мне известно три способа сделать это:

    1. Приватный конструктор.
    2. Приватный деструктор.
    3. Способ, который предлагает сам Страуструп - http://www.research.att.com/~bs/bs_faq2.html#no-derivation

    Каждый из способов имеет свои достоинства и недостатки. Я не удивлюсь, если способов на самом деле больше трех :)

    ОтветитьУдалить
  3. - В Java для этого есть специальное ключевое слово final, но в C++ такого слова нет.

    http://www.kalnitsky.org/2012/01/23/introduction-to-cpp11-new-specifiers/

    ОтветитьУдалить
    Ответы
    1. С появлением новых ключевых слов в C++ задача актуальность не потеряла :)

      Удалить