- 1、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
C++高级程序设计 第7章 多态性 第7章 多态性 多态性(Polymorphism)是面向对象程序设计的重要特性之一。 多态是指为一个函数名称关联多种含义的能力,它不仅提高了面向对象软件设计的灵活性,而且使得设计和实现具有良好的可重用性和可扩充性的应用软件成为可能。 本章主要介绍动态绑定、虚函数、抽象类等重要的概念和实现方法。 7.1 面向对象编程——多态 7.2 虚函数与动态绑定 7.3 纯虚函数与抽象类 7.4 案例实训 第7章 多态性 7.1 面向对象编程——多态 在面向对象程序设计中,多态性是指同样的消息被不同类型的对象接收时会产生完全不同的行为,即每个对象可以用自己特有的方式响应相同的消息。这里的消息是指对函数的调用,不同的行为是指不同的实现,即执行不同的函数。 从程序实现的角度,多态可分为两类:编译时的多态和运行时的多态。编译时的多态性是通过静态绑定实现的,而运行时的多态性则是在程序运行过程中通过动态绑定实现的。这里的绑定(Binding,又称联编)是指函数调用与执行代码之间关联的过程。 静态绑定(Static Binding)是在程序的编译与连接时就已确定函数调用和执行该调用的函数之间的关联。在生成的可执行文件中,函数调用所关联执行的代码是已确定的,因此静态绑定也称为早绑定(Early Binding)。前面介绍的函数重载(含运算符重载)就属于编译时的多态。 动态绑定(Dynamic Binding)是在程序运行时根据具体情况才能确定函数调用所关联的执行代码,因而也称为晚绑定(Late Binding)。动态绑定所支持的多态性能为程序设计带来良好的灵活性、可重用性和可扩充性。在C++中,通常意义上所说的多态性是指动态多态性。 在C++中,动态多态性的实现方法是在同一个类的继承层次结构中通过定义虚函数(Virtual Function)实现。 7.1 面向对象编程——多态 7.1 面向对象编程——多态 设计平面与立体几何形处理程序,类的层次结构如图所示。几何形类为基类,其中定义了求面积和体积的成员函数。在派生类中,根据几何形特征,分别重新定义相应函数以正确地求出相应的面积和体积。 7.1 面向对象编程——多态 在类的继承中,重新定义同名且形参相同的成员函数称为同名覆盖。现假设需要设计一个显示函数,其功能是显示类层次结构中所有类(包含还未定义的派生类)对象的面积和体积等信息,该函数需要能接收类层次结构中的所有类的对象,故函数形参应定义为几何形类的指针(或引用)。由于该函数的形参是基类指针(或引用),从前一章的知识可知,若传递的实参为派生类对象,则函数只能访问几何形类的成员函数而不能访问派生类中的面积和体积函数。 C++的解决方法是将几何形类中的面积和体积函数定义为虚函数,程序在运行时利用多态性能正确地调用与所传递对象对应的计算面积和体积的成员函数。 7.1 面向对象编程——多态 在C++中,当通过基类指针(或引用)请求调用虚函数时,C++程序会在运行过程中正确地选择与对象关联的派生类中重定义的虚函数。 几何形类事实上是一个非常抽象的概念,其具体形状未知,面积和体积无法计算,用其定义对象也无实际意义。这种类在面向对象程序设计中被称为抽象类,其主要用途是为其他类提供合适的基类。 在抽象类中通常仅定义一些没有实现的虚函数(接口),而在其派生类中才实现各自对应的函数。这就是所谓的“单个接口,多种方法”的软件设计思想和技术。 类中的成员函数被声明为虚函数后,C++编译器将对虚函数进行特别处理以支持动态绑定。本节在介绍虚函数的基本用法后,着重解析VC++中动态绑定机制的实现方法,旨在从技术层面理解多态性的概念。 7.2 虚函数与动态绑定 7.2.1 虚函数的定义和使用 虚函数的定义方法是用关键字virtual修饰类的成员函数。例如: virtual double area(); 在C++中,不是任何成员函数都能说明为虚函数,虚函数的使用需要注意以下几点: 在派生类中重定义的虚函数要求函数签名和返回值必须与基类虚函数完全一致,而关键字virtual可以省略。在类的层次结构中,成员函数一旦在某个类中被声明为虚函数,那么在该类之后派生出来的新类中它都是虚函数。 虚函数不能是友元函数或静态成员函数。 ? 7.2 虚函数与动态绑定 7.2 虚函数与动态绑定 构造函数不能是虚函数,而析构函数可以是虚函数。 基类的虚函数在派生类中可以不重新定义。若在派生类中没有重新改写基类的虚函数,则调用的仍然是基类的虚函数。 通过类的对象调用虚函数仅属于正常的成员函数调用,调用关系是在编译时确定的,属于静态绑定。动态绑定(动态多态性)仅发生在使用基类
您可能关注的文档
最近下载
- 2024年版中级经济师经济基础知识讲义.pdf VIP
- 2025年广东省工程技术研究中心动态评估总结.pdf VIP
- 国家中小学智慧教育平台的应用培训.pptx VIP
- 2025云南城投置业股份有限公司招聘7人笔试模拟试题及答案解析.docx VIP
- LeicaMS50_TS50_TM50用户手册_v1.1.1_zh(打印版).docx
- 2025年高考思想政治真题完全解读(甘肃卷)(真题解读课件).pptx
- T CPIA 0093—2024 温室气体 产品碳足迹量化方法与要求 光伏硅料.pdf VIP
- 2025年房地产经纪协理之房地产经纪操作实务试卷附参考答案【考试直接用】.docx VIP
- L-草铵膦原药及制剂项目 环境影响报告书.pdf
- 国家中小学智慧教育平台的应用培训.pptx VIP
文档评论(0)