- 1、本文档共75页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
[工学]面向对象技术与C第五章
多态性 目标 静态联编与动态联编的区别 学会运算符重载的方法 友员运算符函数和成员运算符函数的不同 掌握虚函数的概念 知道什么是纯虚函数,什么是抽象类 内容 静态联编和动态联编 函数重载 运算符重载 虚函数 静态联编和动态联编 面向对象程序设计的三大特征:封装性、继承性和多态性;这三大特征相互关联,其中封装性是基础,继承性是关键,多态性是补充 多态性:指不同对象收到相同的消息时,产生不同的动作,是面向对象程序设计的重要特性之一 C++中,多态性的实现和联编这一概念有关。一个源程序经过编译、连接,成为可执行文件的过程就是把可执行代码联编在一起的过程 静态联编和动态联编 静态联编 定义:在运行之前就完成的联编,又叫前期联编 支持的多态性:静态多态性,即编译时多态性,通过重载函数和运算符实现 特点:函数调用速度快,效率高 动态联编 定义:在程序运行时才完成的联编,又叫后期联编 支持的多态性:动态多态性,即运行时多态性,通过继承和虚函数实现 特点:更好的灵活性、抽象性和易维护性 静态联编 让我们分析下面的程序,看看程序的运行结果如何? 静态联编 静态联编 静态联编 静态联编 静态联编 静态联编 静态联编 静态联编 通过上面的程序我们了解到静态联编的概念 如果想真正的达到我们预想的效果,那么就应该使用动态联编技术 静态联编的关键:函数重载 函数重载的基础知识已经在第二章中详细讲述了 函数重载是实现静态联编的关键技术 函数重载在C++中的实现机制是:名字压延 名字压延技术 C++采用名字压延技术实现函数重载的静态连编 名字压延:为了获取编译时函数名称的唯一的效果,C++把重载函数的本名和参数结合起来,以创造函数的新名字。 动态联编 问题的提出: 继承允许把许多继承同一个基类的派生类看作同一类型,使得使用同一段代码进行处理。有了继承以后,一个对象的功能变窄,它将只能产生我们在基类中定义好的行为,而不能随实际情况动态的变化。 例:建立一个“绘画工作室”程序,它只进行简单的画或擦除动作。所有的图形都继承基类shape,并且都覆盖了基类成员函数接口draw()和erase(),以产生相应的特定的图形绘画动作。我们还定义了studio类,它提供函数调用shape及其派生类对象的draw()和erase()接口函数,用来画或擦除一个图形。 动态联编 在例子中要建立的“绘画工作室” ,它所描述的基类shape和派生类line,triangle、circle之间的关系如下图所示。 动态联编 解决方案: 分析上例发现程序没有达到我们程序设计的目的。其原因是由于继承产生。 如何解决这个问题?采用虚函数解决这类问题,下面我们对上例进行改进,引入虚函数。 动态联编 在上一个例子中,我们预想的程序的运行结果应该是: 要使用动态联编,必须将函数area说明为虚函数 只要将关键字virtual放在类中该函数的函数说明之前 使用virtual修饰的成员函数称为虚函数 虚函数 虚函数只能是类中的一个成员函数,但不能是静态成员 关键字virtual用于类中该函数的说明中 当在派生类中定义了一个同名的成员函数时,只要该成员函数的原型与基类中同名的虚函数原型完全一样,则无论是否为该成员函数使用virtual,它都将成为一个虚函数 虚函数 使用虚函数保证了在通过一个基类类型的指针(包括引用)调用一个函数时,C++系统对该调用进行动态联编 通过对象访问一虚函数时则决定对其使用静态联编 虚函数 基类类型指针和派生类对象之间的关系 指针类型为基类的指针可以指向它的公有派生的对象,但不允许指向它的私有派生的对象(引用也一样) 虚函数 基类类型指针和派生类对象之间的关系 允许将一个指针类型为基类的指针指向其公有派生类的对象,但不能将一个指针类型为派生类的指针“直接”指向其基类的对象 虚函数 基类类型指针和派生类对象之间的关系 指针类型为基类的指针,当其指向公有派生类对象时,只能用它来直接访问派生类从基类继承来的成员,而不能“直接”访问公有派生类中定义的成员 虚函数的实现机制 虚函数的实现机制 多出来的这个空间用来存储什么? VPTR(Virtual Pointer)---虚拟指针 用VPTR指向什么? VTABLE(Virtual TABLE) VPTR和VTABLE只有使用虚函数时才会被系统生成 VPTR是类中的每一个对象都会拥有 VTABLE是一个类中的所有对象的公有 VTABLE中存放虚函数的入口地址 VTABLE中的虚函数的顺序是按照基类中虚函数的声明顺序来决定的 虚函数的实现机制 让我们看看上面那个例子中对象在内存中的分配图: 虚函数的实现机制 假定在two_virtual类的
您可能关注的文档
- [工学]计算机网络第2章.ppt
- [工学]计算机网络管理复习大纲答案.doc
- [工学]计算机网络授课课件第十一讲_网络层6.ppt
- [工学]计算机网络第4章.ppt
- [工学]计算机网络统考串讲习题部分.pdf
- [工学]计算机网络第4章 MAC层.ppt
- [工学]计算机网络技术实用教程第四版第12章 电子工业出版社.ppt
- [工学]计算机软件基础孟彩霞第7章 关系数据库系统.ppt
- [工学]计算机网络课件第02次CH1-5ed_概述02.ppt
- [工学]计算机软件技术基础课件-第2章 常用数据结构及其运算2非线性.ppt
- 福莱特玻璃集团股份有限公司海外监管公告 - 福莱特玻璃集团股份有限公司2024年度环境、社会及管治报告.pdf
- 广哈通信:2024年度环境、社会及治理(ESG)报告.pdf
- 招商证券股份有限公司招商证券2024年度环境、社会及管治报告.pdf
- 宏信建设发展有限公司2024 可持续发展暨环境、社会及管治(ESG)报告.pdf
- 品创控股有限公司环境、社会及管治报告 2024.pdf
- 中信建投证券股份有限公司2024可持续发展暨环境、社会及管治报告.pdf
- 洛阳栾川钼业集团股份有限公司环境、社会及管治报告.pdf
- 361度国际有限公司二零二四年环境、社会及管治报告.pdf
- 中国神华能源股份有限公司2024年度环境、社会及管治报告.pdf
- 广西能源:2024年环境、社会及治理(ESG)报告.pdf
文档评论(0)