RTTI是运行阶段类型识别的简称。目的是为程序在运行阶段确定对象的类型。
C++有3个支持RTTI的元素
注意:RTTI只适用于包含虚函数的类
if(ps=dynamic_cast<A*>(b))
ps->say();
dynamic_cast也可以用于引用,但是当转换失败时,没有与空指针对应的引用值,只能配合try语句来捕捉bad_cast异常
#include <typeinfo>
try{
A& a=dynamic_cast<A&>(b);
}
catch(bad_cast&){
};
typeid能够确定两个对象是否为同一种类型
typeid会返回一个type_info的引用
typeid(A) == typeid(*a)
如果a是一个空指针,则引发bad_typeid异常
type_info通常会含有name()成员,返回类的名称