我正在通过 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.
最佳答案
在基类中声明一个虚函数 final
可以防止它被重写 (10.3/4)。它仍然是继承的,因为所有成员都是继承的(模第12章,特殊成员函数)。因此,派生类是多态的 (10.3/1) 并且 RTTI 有效。
(我假设你不会让你的 dtor final
。那是行不通的。)
关于c++ - RTTI 与 final 一起使用吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9999803/