RTTI 和 类型转换运算符

来源:互联网 发布:2015年淘宝双11销售额 编辑:程序博客网 时间:2024/05/29 17:11

一、RTTI:Runtime Type Identification的简称


RTTI用于只适用于包含虚函数的类


二、RTTI的三个元素:
  • dynamic_cast 运算符将使用一个指向基类的指针来生成一个指向派生类的指针。否则,该运算符返回0--->空指针
  • typeid运算符返回一个指出对象的类型的值
  • type_info结构存储了有关特定类型的信息

1、dynamic_cast : 回答是否可以安全的将对象的地址赋给特定类型的指针
  • 语法:super * pm = dynamic_cast<Super *>(subp)
  • 判断指针subp类型可否安全的被转换成super*,如果可以,返回对象的地址,否则,返回一个空指针(0)
  • 应尽可能使用虚函数,只在必要时使用RTTI

2、typeid运算符:回答两个对象是否是同种类型 ,返回值是bool
  • 参数:类名 或者结果为对象的表达式
  • typeid运算符返回一个对type_info对象的引用,其中,type_info是在头文件typeinfo中定义的一个类
  • 这个类很显然重载了 == 和!=运算符,以方便比较
  • 这个类有一个name() 成员函数,该函数返回一个字符串(内容随厂商而定),一般是类的名称
三、类型转换运算符
        
           通用的格式:    
<span style="white-space:pre"></span>###_cast <type_name> (expression)
  •         dynamic_cast  使得能够在类层次结构中进行向上转换
  •         const_cast 改变值为const或volatile ,也就是说只允许两个类型的const或volatile的值不同外,其他属性必须相同,否则转换出错
  •         static_cast  仅当type_name 可以隐式转换为expression  或者 expression 可以隐式转换为type_name时,才是合法的
  •                            即基类向派生类转换和派生类向基类转换都是合法的,但是向一个无关的类转换,是非法的
  •          reinterpret_cast 设计底层编程技术。
0 0
原创粉丝点击