C++的运行时刻类型识别.pdfVIP

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
C的运行时刻类型识别,c运行时类型识别,运行时类型识别,c类型识别,上海地铁运行时刻表,北京地铁运行时刻表,南京地铁运行时刻表,成都地铁运行时刻表,新列车运行时刻表,广州地铁运行时刻表

C++的运行时刻类型和标准程序库 内容提要:运行时刻类型识别(RTTI )是 C++一个很吸引人的特征:一般的 C++程序都是使用 一个指向基类的指针,然后调用基类的接口(虚函数),但是在某些特殊的情况下,需要知道基类指 针所指对象的确切类型来提高程序的效率,那么,就可以使用 RTTI 。同时介绍了标准程序库的历史、 标准程序库的含义和标准程序库的基本组成等内容 关键字:dynamic_cast 运算符、typeid 运算符、type_info 类、标准模板库 引言:运行时刻类型识别(RTTI )经常被说成是 C++ 的四大扩展之一(其他的三个是模板,异 常和名字空间)。它们影响了人们对程序的组织方式,使得人们可以很方便的从部分独立的库出发组 合软件。 正文: 1 引言 C++有了继承的机制,那么就可以使用指向基类的指针或引用来指向派生类的对象。然后,我 们就可以编写程序来操纵这些指针或引用,而不用考虑它所指向的对象的实际类型。使用基类指针 或引用来操纵多个派生类的能力被称为多态,在本章中,我们将介绍 C++支持多态性的一个特性— —RTTI (Run-time Type Identification ,运行时刻类型识别)。使用 RTTI ,程序员可以获得由基类指 针或引用所指向的对象的实际类型。为了支持 RTTI ,C++提供了两个运算符: (1)运算符 dynamic_cast ,它允许在运行时刻进行类型转换,使得程序能够在一个类层次结构 中安全地进行类型转换,如把基类指针转换成派生类指针,或者把指向基类的左值转换成派生类的 引用,当然只有在保证转换能够成功的情况下才可以。 (2 )运算符 typeid ,它可以指出指针或引用指向的对象的实际类型。 我们知道只有当类中存在有一个或多个虚函数时,编译器才会给派生类添加类型信息。也就是 说,dynamic_cast 和 typeid 运算符的操作数的类型必须是带有一个或多个虚函数的类型。对于带有 虚拟函数的类而言,RTTI 运算符是运行时刻事件,而对于其他类型,它只是编译时刻的事件。在本 章,我们将详细地讨论这两个运算符的用法。 在实现某些应用程序(例如 debugger 或者数据库程序)时,RTTI 的应用是很有必要的。在这 些应用程序中,只有在运行时刻通过检查“与对象类型一起存储的类型信息”,我们才能知道对象的 类型。但是,由于 RTTI 所需的代价会比较大,我们应该尽量减少使用 RTTI ,而尽可能多的使用 C++ 的静态类型系统(即编译时刻类型检查),因为它更加安全有效。 2 dynamic_cast 运算符 运算符 dynamic_cast 可以用来把一个指向某个类对象的指针转换成同一个类层次结构中的其他 类的指针,同时也可以用它把一个类对象的左值转换成为同一个类层次结构中其他类的引用。与 C++ 其他的强制转换不同的是,dynamic_cast 是在运行时刻执行的。如果指针或者左值操作数不能转换 成为目的类型,则 dynamic_cast 将操作失败:如果操作数是指针类型,dynamic_cast 失败时返回的 结果是 0 ;如果是针对引用的 dynamic_cast 失败,则运算符 dynamic_cast 会抛出一个异常。 在进一步讲解 dynamic_cast 的用法之前,先来看看一个例子,了解在什么时候需要用到 dynamic_cast 运算符。假设有一个程序用类库来表示游戏中的不同角色。这个类层次结构的类都支 持某些成员函数,以支持游戏中的某些动作。例如: class character { public : virtual void walk(); }; ※ 1 ※ class lion : public character { public : void walk(); }; class panda : public character { public : void walk(); }; class scene { public : void move( cha

文档评论(0)

wdhao + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档