RTTI 和 类型转换运算符

本文深入探讨了RTTI(运行时类型识别)的概念及其在面向对象编程中的作用,包括动态_cast、typeid运算符的用法及类型转换运算符的详细解释。

一、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 设计底层编程技术。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值