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



