第09章 多态性:总结 计划 汇报 设计 纯word可编辑.pptVIP

第09章 多态性:总结 计划 汇报 设计 纯word可编辑.ppt

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
第09章 多态性:总结 计划 汇报 设计 纯word可编辑

9.1 静态联编与动态联编 所谓联编(tinding),就是使一个计算机程序的不同部 分彼此关联的过程。 静态联编在编译阶段完成,因为所有联编过程都在程 序开始运行之前完成,因此静态联编也叫先前联编或早期 联编。 编译程序在编译时并不确切知道应把发送到对象的消 息和实现消息的哪段具体代码联编在一起,而是在运行时 才能把函数调用与函数体联系在一起,则称为动态联编。 9.1.1静态联编 对重载函数的调用是在编译阶段完成联编的,有 下述3种区分重载函数的方法: ⒈根据实参特征来区分。 ⒉使用作用域分辨符加以区分。 ⒊根据对象的类型来区分。 9.1.1静态联编 下面让我们看一个简单程序例子: #include stdafx.h #include iostream.h class Base { public: void Who() { cout I am base class\n; } }; class FirstDerived : public Base { public: void Who() { cout I am first derived class\n; } }; class SecondDerived : public Base { public: void Who() { cout I am second derived class\n; } }; 9.1.1静态联编 void main() { Base base_obj; Base *p;//声明一个指向基类的指针P FirstDerived first_obj; SecondDerived second_obj; p = base_obj; p - Who(); p = first_obj; p - Who(); p = second_obj; p - Who(); first_obj.Who(); second_obj.Who(); } 9.1.2动态联编 如果随着指针P实际指向的对象不同,使用语句 P-Who( );能够调用不同类中Who的相同版本,我们 就可以用相同的界面P-Who( )访问函数Who的多个实 现版本,从而也就能够在程序运行时告诉用户,当时指 针P实际指向何类对象。函数调用P-Who( )依赖于程序 运行时P的值。虚函数提供的就是这样一种机制。把由指 针调用的成员函数声明为虚函数,则声明为指向基类对 象的指针,可以根据它在程序运行过程中当时实际指向 的对象类型,通过动态联编调用相应类中的虚函数。 9.1.2动态联编 为了把成员函数Who声明为虚函数,我们把上述程序修改为: #include stdafx.h #include iostream.h class Base { public: virtual void Who() //定义Who()为虚函数 { cout I am base class\n; } }; class FirstDerived : public Base { public: void Who() { cout I am first derived class\n; } }; 9.1.2动态联编 class SecondDerived : public Base { public: void Who() { cout I am second derived class\n; } }; void main() { Base base_obj; Base *p; FirstDerived first_obj; SecondDerived second_obj; p = base_obj; p - Who(); p = first_obj; p - Who(); p = second_obj; p - Who(); } 9.2 虚函数的声明与使用 9.2.1声明虚函数 声明虚函数的一般格式如下: virtual 函数原型; ⑴ 必须首先在基类中声明虚函数。 ⑵ 派生类中与基类虚函数原型完全相同的成员函 数,即使在说明时前面没有冠以关键字virtual也自 动成为虚函数。 9.2.1声明虚函数 ⑶ 只有非静态成员函数可以声明为虚函数。 ⑷ 不允许在派生类中定义与基类虚函数名字及参数 特征都相同,仅仅返回类型不同的成员函数。 编译时 出错。 ⑸ 系统把函数名相同但参数特征不同的函数视为不 同的函数。 ⑹ 通过声明虚函数来使用C++提供的多态性机制 时,派生类

文档评论(0)

aena45 + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档