RTTI和typeid操作符.ppt
《RTTI和typeid操作符.ppt》由会员分享,可在线阅读,更多相关《RTTI和typeid操作符.ppt(11页珍藏版)》请在三一办公上搜索。
1、第17章 RTTI、类型转换操作符、typeid,RTTI,是RunTime Type Identification的缩写,称“运行时类型识别”,这是C+中相对较新的特性,一些老式的编译器可能不支持,不同编译器的实现方法也不尽相同。,17.1 RTTI机制,C+是一种静态类型语言。其数据类型是在编译期就确定的,不能在运行时更改。在第11章中讲述了“多态”的概念,虚函数的使用使得动态联编成为可能,举例来说,存在一个类层次结构A-B-C,结构定义为;class A;/包含虚函数class B:public A;class C:public B;此时,可以直接用派生类(B类或C类)对象为A类指针赋值
2、,而且,通过该A类指针调用虚成员函数时,调用的版本是为其赋值的派生类对此虚函数的覆盖定义。当然,不可能把所有函数都定义成虚函数,对派生类中定义的普通函数来说,使用A类指针调用该函数是否合法需要具体分析。先来看如下的强制类型转换机制:A*pa=new B;B*pb=(B*)pa;/直接赋值编译器会报错,需要强制转换上述代码是很安全的,因为pa指向的堆空间中存储的恰好为B类对象,此时使用pb调用B类中定义的非虚函数不会出错。看另一个转换:A*pa=new A;B*pb=(B*)pa;虽然编译器不会报错,但上述代码明显不安全,存在问题,此时使用pb调用B类中的非虚函数必然会出错。,VC6.0中使用R
3、TTI要进行的设置,在VC6中使用RTTI要进行如下设置,否则运行出错。,17.1.1 dynamic_cast操作符,综合来看,使用派生类对象为基类指针赋值是安全的,可什么时候使用基类指针为派生类指针赋值是安全的呢?C+提供了操作符dynamic_cast,其语法是:CSon*p1=dynamic_cast(pBase);其中pBase是基类指针,CSon是派生类型,如果pBase指向的对象是CSon型或CSon的派生类型,指针转换成功,否则,p1为null,即空指针。见代码17-1,17.1.2 typeinfo类和typeid操作符,在头文件typeinfo中还定义了typeinfo类和
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- RTTI typeid 操作
![提示](https://www.31ppt.com/images/bang_tan.gif)
链接地址:https://www.31ppt.com/p-6524245.html