《RTTI和对象转型》由会员分享,可在线阅读,更多相关《RTTI和对象转型(2页珍藏版)》请在金锄头文库上搜索。
1、RTTI和对象转型这是我学习基于LinuxC+做的笔记!运行期型式信息RTTIRTTI运行期间表示对象的型式信息优势:允许使用指向基类的指针或引用自如地操纵派生类对象typeid:获取表达式的类型;type_info:型式信息类;”头文件:typeinfo”对象转型模板dynamic_cast:动态转型(类类型指针或引用的转型)static_cast:静态转型reinterpret_cast:复诠转型const_cast:常亮转型type_info类1. 编译器实现的动态形式信息类型;2. 用于在程序运行时保存数据对象的形式信息;3. 不能直接使用该类,只能通过typeid操作符;4调用成员函
2、数name(),可以获得类的名称;typeid操作符#includeProgrammerp;/z类Employee&e=p;/类couttypeid(e).name()endl;输出p实际类名的字符串Programmer”dynamic_cast三种方式“向上转型“向下转型“交叉转型:沿着类多重继承层次横向转型指针的动态转型“正确执行:指向目标类对象错误:结果为0/NULL(C+11:nullptr)引用的动态转型。正确执行:目标类对象的引用错误:引发bad_cast异常static_cast*与dynamic_cast不同,static_cast不仅可以用于指针和引用,还可用于其他类型“一般
3、用于非类型式的普通数据对象转型static_cast的问题“不进行运行期型式检查,不安全“若转型失败结果未定义const_cast。用于取消和设置量的const状态const_cast的问题classConstCastTestpublic:voidPrintNum()const;private:int_num;voidConstCastTest:PrintNum()const传进来常量指针this,指向当前类对象临时将指向常量对象指针转换为非常量const_cast(this)-num-;cout_numendl;reinterpret_cast。将任意型式的数据对象转型为目标型式可用于int与指针型的互换reinterpret_cast的问题”由程序员保证正确性64位系统和32位系统,之间的转型可能会出错