RTTI работает с финалом? - PullRequest
       18

RTTI работает с финалом?

3 голосов
/ 03 апреля 2012

Я изучаю C ++ 11 через C ++ 11 FAQ от Страуструпа. У меня есть вопрос.

Если виртуальная функция определена как финальная в классе, RTTI (dynamic_cast и typeid) все еще работает в своем производном классе?


@ MSalters: Я хотел сказать, скажем:

struct A {
    virtual void f() final; // only one virtual function, but final
};
struct B : A {
};
A* pa = new B;
B* pb = dynamic_cast<B*>(pa); // would this work? I guess it applies to typeid as well.

1 Ответ

3 голосов
/ 04 апреля 2012

Объявление виртуальной функции final в базовом классе предотвращает ее переопределение (10.3 / 4).Это все еще наследуется, потому что все члены наследуются (по модулю глава 12, специальные функции-члены).Следовательно, производный класс является полиморфным (10.3 / 1), и RTTI работает.

(я предполагаю, что вы не собираетесь делать свой dtor final. Это не работает.)

...