我正在通过Stroustrup的C ++ 11 FAQ学习C ++ 11。我有一个问题。
如果在类中将虚函数定义为final,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.
答案 0 :(得分:3)
在基类中声明虚函数final
可以防止它被覆盖(10.3 / 4)。它仍然是继承的,因为所有成员都是继承的(模12章,特殊成员函数)。因此,派生类是多态的(10.3 / 1),RTTI可以工作。
(我假设你不打算制作你的dtor final
。这不起作用。)