RTTI

class Grand{};
class Superb:public Grand{};
class Magnificent:public Superb{};

Superb *pm=dynamic_cast<Superb *>pg;
如果类型转换成功返回Superb指针,不成功返回0
2.引用的动态转换。
引用不回产生空,但动态转换失败会抛出bad_cast异常
#include<typeinfo>
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()方法
4.四种类型转换操作符
dynamic_cast
const_cast
static_cast
reinterpret_cast
dynamic_cast 用于类和派生类的强制类型转换
例:
High * ph;
Low * pl;
pl=dynamic_cast<Low *>ph;
当Low是High的基类时,可以成功转换否则返回空指针。
const_cast
参考:https://www.cnblogs.com/ider/archive/2011/07/22/cpp_cast_operator_part2.html

posted @ 2024-08-22 14:29  zhongta  阅读(12)  评论(0)    收藏  举报