- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
第14章 多态性 多态性是面向程序设计的重要特征之一。它与前在所介绍的封装性和继承性构成了面向程序设计的三大特征。所以我们想要学好面向对象编程就必须对这三大特征了如指掌。三大特征相互关联,共同作用。数据封装是面向对象的基础,继承是关键,多态性则是补充,而且多态性又存在于继承之中,所以就像修房子一样,先打好地基,再沏房子,最后在房子的基础上进行装修,最后就完成了一所自己喜欢的房子。 通过本章的学习,要了解如下的内容: 熟练掌握多态的概念,以及使用类的多态性。 注意多态相关的要点。 熟练掌握如何使用虚函数。 14.1 多态性 去动物园时肯定看过猴子和老虎了,那它们跑步的动作有什么区别呢?猴子跑步用的是两条腿,一边跑还一边跳的,很是活泼。老虎就不一样了,用的是四条腿,跑起来很是凶猛,不过动物园的老虎都是娇生惯养的,根本就不怎么跑,只知道睡觉。这里要讲的东西是从这些事情里面抽象出来的,学完本章的知识后会有一个理性的认识。 14.1.1 没有多态将会遇到的问题 现在就通过动物跑步的例子来初步了解多态吧!先看图。 14.1.2 多态的定义 多态性是指用一个名字定义不同的函数,这个函数执行不同,但又有类似的操作。从而实现“一个接口,多种方法”。 14.1.3 普通成员函数重载的方法 在C++语言中,两个或更多的函数共同使用一个名字,有两种方法可以完成这种任务,第一种是在声明函数原型时形式参数的个数不同,例如:在同一作用域中声明了如下两个函数: void fun(int a); void fun(int a,int b); 1.通过函数参数个数不同完成重载 2.通过函数参数类型不同完成重载 14.1.4 普通成员函数在类中重载 如果是普通成员函数在类中,能不能重载呢?当然是可能的。例如:在一个类中定义如下的两个函数。 Print(int); Print(double); 14.1.5 基类的成员函数在派生类中存在重载吗 基类的成员函数在派生类中存在重载吗?在不同的非名字空间作用域里声明的函数不算是重载,所以不存在基类的成员函数在派生类中的重载,但是可以在派生类中再定义一个新的同名函数,通过下面的例子将了解到这一点。 1.使用“::”调用成员函数 2.根据类的对象调用成员函数 14.1.6 函数重载的注意事项 上面讲了那么多,那如果根据不同的函数返回值类型能不能完成函数重载呢?请看下面的例子。 14.1.7 函数重载的二义性 前面已经了解了函数重载的方法,现在就来谈谈这其中存在的一些问题。函数重载在使用的过程中会存在二义性的问题,也就是说编译程序无法在多个重载函数中选择正确的函数进行调用。就像一个班里面有两个同名的同学,当看到他们其中的一个时,能叫出他的名字,但是当上课过程中,老师叫到他们的名字时,就不知道老师叫的是谁了。假如班上有两个叫陈天的同学,起初老师叫陈天同学回答问题时,要不他们俩都不站起来,要不都站起来,场面很是尴尬,后来老师按他们的年龄改了名字,一个叫陈小天,一个叫陈大天,这样就不会有误会了,函数的二义性就跟这个差不多,只不过这里的老师成了C++编译器,同名的同学成了存在二义性的重载函数。 14.1.8 构造函数重载 上面讲了函数重载,那类中的构造函数是否也能重载呢?构造函数也是函数,当然能重载了,而且使用的频率还非常的高,因为创建一个类对象时,希望以不同的方式初始化对象的成员,而通过重载就能达成这一目的。构造函数重载与函数重载一样是使用同名函数吗?是的,不过构造函数的函数名是固定的,即类的名字,不能为其他的名字,当为其他名字时就不是构造函数。如果定义了一个类:class A,则它构造函数的名字只能是A,而不能为其他的名字。构造函数重载与函数重载有什么相同的地方?跟函数一样,构造函数也是根据参数个数不同或对应类型不一样完成重载的,如果一个类有一个或多个构造函数,当创建类的对象时,编译器会根据参数个数不同或对应类型不同来选择适合它的函数。 1.构造函数重载的方法 2.构造函数重载带来的二义性 14.1.9 基类指针指向派生类 可以利用一个指向基类的指针指向派生类的对象,不过这个派生类必须是通过公有派生出来的,而且一个基类指针可以用来指向从基类公有派生的任何对象,如图所示。 14.2 虚函数 为了完成程序的动态联编,此时就要使用虚函数,使程序在运行时进行绑定。前面已经对静态绑定进行了学习,那么程序是如何进行动态绑定,使程序在运行的时候调用相应的函数呢?这时就要加入虚函数机制。那什么是虚函数呢?是不存在的函数吗?当然不是。本节就通过虚函数来进行程序的动态绑定。 14.2.1 没有虚函数将会遇到的问题 本节要学习的虚函数。先看一个例子,如果没有虚函数,该怎么办?就以车(vehicle)为例吧,大家熟知的车有警车
您可能关注的文档
最近下载
- 关于十二矿优化劳动组织的调研报告.docx VIP
- 沪粤版九年级物理上册知识点整理.pdf VIP
- 关于十二矿优化劳动组织的调研报告.doc VIP
- 2025年财会类中级会计职称中级会计实务-中级会计实务参考题库含答案解析(5套试卷).docx VIP
- 旅游咨询项目创业计划书.pptx VIP
- 西师版数学六年级上册全册教案.pdf VIP
- 2025江西鹰潭市公安局面向社会招聘留置看护勤务辅警87人笔试备考试题及答案解析.docx VIP
- 浅析互联网金融平台的风险与监管——以蚂蚁金服为例.doc VIP
- 旅游咨询创业计划书.pptx VIP
- 【0181】46页PPT数字化建设项目总体规划蓝图(豪华版).pptx VIP
文档评论(0)