- 1、本文档共89页,可阅读全部内容。
- 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程序设计—多态与虚函数
C++程序设计—多态与虚函数 主讲:资讯系张玉宏 多态(Polymorphism)的概念 多态是指类中具有相似功能的不同函数是用同一个名称来实现,从而可以使用相同的调用方式来调用这些具有不同功能的同名函数。这也是人类思维方式的一种直接模拟,可以利用多态的特征,用统一的标识来完成这些功能。这样,就可以达到类的行为的再抽象,进而统一标识,减少程序中标识符的个数。 多态的概念 多态从实现的角度来讲可以划分为两类,编译时的多态和运行时的多态。前者是在编译的过程中确定了同名操作的具体操作对象,而后者则是在程序运行过程中才动态的确定操作所针对的具体对象。这种确定操作的具体对象的过程就是联编,也有的文献成为编联,束定或绑定(binding)。 多态的概念 联编是指计算机程序自身彼此关联的过程,也就是把一个标识符名和一个存储地址联系在一起的过程;用面向对象的术语讲,就是把一条消息和一个对象的方法相结合的过程。按照联编进行的阶段的不同,可以分为两种不同的联编方法:静态联编和动态联编,这两种联编过程分别对应着多态的两种实现方式。 静态联编 联编工作在编译连接阶段完成的情况成为静态联编。因为联编过程外程序开始执行之前进行的,因此有时也称为早期联编或前联编。在编译,连接过程中,系统就可以根据类型匹配等特征确定程序中操作调用与执行该操作代码的关系,其确定了某一个同名标识到底是要调用那一段程序代码。有些多态类型,其同名操作的具体对象能够在编译,连接阶段确定,通过静态联编解决,比如函数重载。 动态联编 和静态联编相对应,联编工作在程序运行阶段完成的情况称为动态联编,也称为晚期联编(late bingding)或后联编。在编译,连接过程中无法解决的联编问题,要等到程序开始运行之后再来确定,它常用虚函数(virtual function)来实现。 虚函数是动态联编的基础,属于包含多态类型。虚函数是非静态的成员函数,虚函数经过派生之后,在类族中就可以实现运行过程中的多态。 填空题 面向对象程序设计中的多态性包括静态多态性和动态多态性,前者由____________机制支持,而后者则由____________机制支持。 答:函数重载、虚函数 [解析]静态多态性又称编译时多态性,调用何函数应该在编译之前就知道了,所以必须由函数重载机制来支持。动态多态性又称运行时多态性,调用何函数只有在运行时才知道,所以由虚函数(与指针或引用)机制来支持。 虚函数 在面向对象的C++语言中,虚函数(virtual function)是一个非常重要的概念。因为它充分体现了面向对象思想中的继承和多态性这两大特性,在C++语言里应用极广。比如在微软的MFC类库中,你会发现很多函数都有virtual关键字,也就是说,它们都是虚函数。难怪有人甚至称虚函数是C++语言的精髓。 那么,什么是虚函数呢,我们先来看看微软的解释: 虚函数是指一个类中你希望重载的成员函数,当你用一个基类指针或引用指向一个继承类对象的时候,你调用一个虚函数,实际调用的是继承类的版本。 ——摘自MSDN 虚函数的定义 在类中,只需要在成员函数原型声明之前加上关键词virtual即可把某一个函数说明成一个虚函数。 virtual 只用来说明类定义中的原型,不能用在函数实现时。以下定义存在错误: class B0 //基类B0声明 {public: virtual void display(); }; virtual void B0::display()//不再需要virtual {coutB0::display()endl;} //error C2723: display : virtual storage-class pecifier illegal on function definition. 虚函数 虚函数是动态联编的基础。 说明为虚函数必须是非静态的成员函数。 具有继承性,基类中定义了虚函数,派生类中无论是否说明关键词virtual,同原型函数都自动为虚函数。 在派生类中可以重新定义虚函数,从而使派生类中的函数版本代替基类定义的函数版本。 本质:不是重载定义而是覆盖定义。 调用方式:通过基类指针或引用,执行时会根据指针指向的对象的类,决定调用哪个函数。 覆盖与重载区别 覆盖(override)是指子类重新定义父类的虚函数的做法。而重载(overload)是指允许存在多个同名函数,而这些函数的参数表不同(或许参数个数不同,或许参数类型不同,或许两者都不同)。其实,重载的概念并不属于“面向对象编程”,重载的实现是:编译器根据函数不同的参数表,对同名函数的名称做修饰,然后这些同名函数就成了不同的函数(至少对于编译器来说是这样的)。 如有两个同名函数: int abc
您可能关注的文档
- AC小区规划设计完整版.ppt
- ADS7846触摸屏控制器的工作原理.doc
- AEFI及其防范.ppt
- AK表1-1组织建设.doc
- An Alternative View of Risk and Return∶ The APT.ppt
- An Analysis of Amir Pauline’s Character in The Kite Runner.doc
- An Analysis of Carrie’s Character in Sister Carrie.doc
- An Analysis of Martin Eden’s Tragic Image.doc
- Analysis of Edmond Dantes’ Humanity in The Count of Monte Cristo.doc
- Android定位源码_免费下载.doc
最近下载
- 2020年最新小学数学教师编制考试新课标测试题及答案(三).docx VIP
- 拼多多法律顾问岗面试题库参考答案和答题要点.docx VIP
- 腾讯法律顾问岗面试题库参考答案和答题要点.docx VIP
- 小米法律顾问岗面试题库参考答案和答题要点.docx VIP
- 网易法律顾问岗面试题库参考答案和答题要点.docx VIP
- 惠普HP DeskJet Ink Advantage Ultra 4800 系列参考指南.pdf
- 第19课 七七事变与全民族抗战 学案(记忆清单+分层训练)(2024年).doc VIP
- DB32T 5071-2025长江江苏段污染物接收船舶作业条件及要求.docx VIP
- DB32T 5071-2025 长江江苏段污染物接收船舶作业条件及要求.docx VIP
- 短视频拍摄与剪辑:拍摄商品短视频PPT教学课件.pptx
文档评论(0)