- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
嵌入式Linux技术咨询QQ号: 550491596 嵌入式Linux学习交流QQ群: 版权声明:本课件及其印刷物、视频的版权归成都国嵌信息技术有限公司所有,并保留所有权力:任何单位或个人未经成都国嵌信息技术有限公司书面授权,不得使用该课件及其印刷物、视频从事商业、教学活动。已经取得书面授权的,应在授权范围内使用,并注明“来源:国嵌”。违反上述声明者,我们将追究其法律责任。 第27课动态类型识别 问题 下面的程序有问题吗? 动态类型 由于基类指针可以直接指向派生类对象,因此可能存在指针所指类型与具体指向的对象类型不同的情况 p指向的静态类型为Parent p实际指向的对象类型为Child 动态类型 动态类型指的是基类指针所指向的对象的实际类型 基类指针是否可以强制类型转换为子类指针取决于动态类型! 动态类型 C++中如何得到动态类型? 动态类型识别 C++中的多态根据实际的对象类型调用对应的虚函数 可以在基类中定义虚函数返回具体的类型信息 所有的派生类都必须实现类型相关的虚函数 每个类中的类型虚函数都需要不同的实现 动态类型识别 利用多态进行动态类型识别 example27-1.cpp 动态类型识别 使用虚函数进行动态类型识别的缺陷 必须从基类开始提供类型虚函数 所有的派生类都必须重写类型虚函数 每个派生类的类型ID必须唯一 利用虚函数进行动态类型识别的方法可以满足工程的需要,但是维护性会随着派生类的增多而成指数级增加。 动态类型识别 新的关键字dynamic_cast dynamic_cast是C++中的新型转换关键字 dynamic_cast主要用于基类和派生类之间的转换 dynamic_cast要求使用的目标对象类型是多态的 即:所在类族至少有一个虚函数 用于指针转换时,转换失败返回空指针 用于引用转换时,转换失败将引发bad_cast异常 动态类型识别 利用dynamic_cast进行动态类型识别 example27-2.cpp 动态类型识别 dynamic_cast的优势 不用显示的声明和定义类型虚函数 不用为类族中的每个类分配类型ID dynamic_cast的缺陷 只能用于具有虚函数的类族 使用dynamic_cast进行动态类型识别可以取代类型虚函数的方案,但是在本质上dynamic_cast还是需要类族中存在虚函数(在工程上常把析构函数作为这个虚函数定义)。 动态类型 C++中是否可以动态得到任意变量的类型信息呢? 动态类型识别 C++提供了typeid关键字用于动态获取类型信息 typeid关键字返回对应参数的类型信息 typeid返回一个type_info类对象 当typeid的参数为NULL时,抛出bad_typeid异常 type_info类的使用需要包含typeinfo 动态类型识别 typeid关键字的使用 example27-3.cpp 小结 C++中可以通过多态的方式进行动态类型识别 dynamic_cast关键字是可用于动态类型识别 typeid关键字在C++中专用于动态类型的识别 嵌入式Linux技术咨询QQ号: 550491596 嵌入式Linux学习交流QQ群: 版权声明:本课件及其印刷物、视频的版权归成都国嵌信息技术有限公司所有,并保留所有权力:任何单位或个人未经成都国嵌信息技术有限公司书面授权,不得使用该课件及其印刷物、视频从事商业、教学活动。已经取得书面授权的,应在授权范围内使用,并注明“来源:国嵌”。违反上述声明者,我们将追究其法律责任。
文档评论(0)