- 1、本文档共24页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
面向对象编程技术与方法(C++)第7章 多态第7章 多 态第7章 多态 7.1 多态性概述 7.2 虚函数 7.2.1 虚函数的声明与应用 7.2.2 虚析构函数 7.3 如何实现动态绑定 7.4 纯虚函数与抽象类 7.5 小结 第7章 多 态7.1 多态性概述 7.2 虚函数 7.3 如何实现动态绑定 7.4 纯虚函数与抽象类 7.5 小结 第7章 多 态7.1 多态性概述对于重载函数,在调用函数处,编译器能够根据类型匹配情况确定要调用哪个函数。这个工作是在编译连接阶段进行的,称为静态绑定(static binding)或早期绑定(early binding)。面向对象多态(polymorphism)的目的,是让处理基类对象的程序代码,能够处理派生类对象。或者说,对于同样的消息(函数调用),被不同类型对象接收时导致不同的行为。这个功能是通过虚函数实现的。虚函数机制使得函数调用与函数体的联系可以在程序运行时确定,这称为动态绑定(dynamic binding),又称为晚期绑定或运行时绑定。第7章 多 态7.1 多态性概述 7.2 虚函数 7.3 如何实现动态绑定 7.4 纯虚函数与抽象类 7.5 小结 第7章 多 态7.2 虚函数 7.2.1 虚函数的声明与应用将一个成员函数声明为虚函数,就是在前面添加关键字virtual。第7章 多 态这种在派生类中对virtual函数的再定义,称为重写(overriding),注意要与函数重载(overloading)与第6章中的函数同名屏蔽区分开。由于虚机制的存在,程序在运行时根据对象的类型去调用合适的成员函数。这样的程序结构具有很好的可扩展性。例如可以在基类的基础上派生出任意的新类型,而函数test()不需做任何改变就可用于新类型的对象。第7章 多 态使用虚函数时应注意以下几点: 1. 虚函数是成员函数,但不会是静态成员函数。2. 如果虚函数定义在类体外,则关键字virtual只能出现在类内的函数声明前。当使用作用域运算符“::”时,虚机制不再起作用。派生类中的对应函数接口必须与基类中的完全相同。对函数返回类型可以稍微放松要求,如果基类中的虚函数返回类型是A*(或A),派生类中重写的函数可以返回B*(或B),其中B是A的public派生类。如果不满足这些要求,则派生类中的同名函数就不是对基类虚函数的重写,而是重新定义的一个函数,即使带有关键字virtual也是如此。如果原函数有默认形参值,就不要在派生类中再定义新的形参值。因为默认形参值是静态绑定的,只能来自基类中的定义。在多层次继承中,如果派生类没有对基类的虚函数进行重写,则自动调用继承层次中最近的虚函数。第7章 多 态要想实现运行时的多态,必须满足三个基本条件:1)public继承;2)虚函数;3)通过指针(或引用)调用虚函数。运行结果:Graduate::Show()Graduate::Show()UnivPerson::Show()Student::Study()Student::Eat()Graduate::Eat()Student::Study()Graduate::Show()第7章 多 态7.2 虚函数 7.2.2 虚析构函数构造函数不能为虚函数,而析构函数可以是虚函数。如果基类的析构函数是虚函数,则所有派生类的析构函数都自动为虚函数。将析构函数声明为虚函数,可以使程序运行更加安全。运行结果:Constructor of CPoint. Constructor of Rectangle. Destructor of CPoint.改成虚析构函数后的运行结果:Constructor of CPoint. Constructor of Rectangle. Destructor of Rectangle. Destructor of CPoint.第7章 多 态7.1 多态性概述 7.2 虚函数 7.3 如何实现动态绑定 7.4 纯虚函数与抽象类 7.5 小结 第7章 多 态7.3 如何实现动态绑定对于含虚函数的类,编译器为每个类建立唯一的虚函数表vtable,表中存放该类的虚函数的地址,包括新声明的以及继承的虚函数。编译器还为每个类加上一个数据成员vptr,这是一个指向虚函数表的指针。虚函数表中的顺序,与类中虚函数的声明顺序一致。派生类会继承基类的虚函数表,当在派生类中重写虚函数时,表中元素存储的地址将不再是基类虚函数的地址,而是派生类虚函数的地址。 第7章 多 态class A{public: int data1; void fun1() {} virtual void vfun1() { } virtual void vfun2() { }
您可能关注的文档
- 大数据概念介绍.pptx
- 信息传递概念介绍.pptx
- 信息检索概念介绍.pptx
- 信息社会责任概念介绍.pptx
- 信息素养概念介绍.pptx
- 面向对象编程技术与方法第1章面向对象编程技术概述.pptx
- 面向对象编程技术与方法第2章C++编程基础.pptx
- 面向对象编程技术与方法第3章函数.pptx
- 面向对象编程技术与方法第4章类与对象.pptx
- 面向对象编程技术与方法第5章运算符重载.pptx
- 市科技局副局长在理论学习中心组学习2025年全国两会精神研讨发言材料.docx
- 在深入贯彻中央八项规定精神学习教育读书班开班式上的讲话1.docx
- 关于开展深入贯彻中央八项规定精神学习教育的工作方案.docx
- 市国资委党委书记学习2025年全国两会精神专题研讨发言材料.docx
- 在2025年作风建设专题“读书班”上的研讨发言材料(八项规定).docx
- 在县政府全体会议暨廉政工作会议上的讲话4.docx
- 关于我市农村电商发展情况的调研报告.docx
- 在某某区安全生产重点工作安排部署会上的讲话.docx
- 市发改局党组书记在理论学习中心组会上学习2025年全国两会精神的研讨发言材料1.docx
- 商务局委员会(商务局)基层党组织“分类指导、争先进位”工作方案.docx
文档评论(0)