RTTI
RTTI是运行阶段类型识别的简称。目的是为程序在运行阶段确定对象的类型。
C++有3个支持RTTI的元素
- dynamic_cast,将派生类转成基类指针,出错返回0-空指针
- typeid返回指向对象类型的值
- type_info结构存储了类型信息
注意:RTTI只适用于包含虚函数的类
dynamic_cast
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和type_info
typeid能够确定两个对象是否为同一种类型
typeid会返回一个type_info的引用
typeid(A) == typeid(*a)
如果a是一个空指针,则引发bad_typeid异常
type_info通常会含有name()成员,返回类的名称