class Grand{};
class Superb:public Grand{};
class Magnificent:public Superb{};
Superb *pm=dynamic_cast<Superb *>pg;
如果类型转换成功返回Superb指针,不成功返回0
2.引用的动态转换。
引用不回产生空,但动态转换失败会抛出bad_cast异常
include
try{
Superb & rs=dynamic_cast<Superb &>(rg);
}catch(bad_cast &){
...
}
3.typeid操作符和type_info类
typeid用来检测两个对象是否是同一类型
type_info定义在typeinfo头文件内,重载了和!=操作符用来比对类型。
typeid(Magnificient)typeid(pg);
对比类和指针指向的对象是否是同一类型的。如果pg指向空,会扔出bad_typeid异常,该异常类型继承于exception类,定义在typeinfo头文件中。
cout<<"Now processing type "<<typeid(pg).name()<<".\n";
输出指针指向的对象的类名。调用name()方法