C++语言程序设计 教学课件 尹季昆 主编 第四章 多态性.pdfVIP

C++语言程序设计 教学课件 尹季昆 主编 第四章 多态性.pdf

  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文档。上传文档
查看更多
第4章 多 态 性   知识点   编程时的多态性与运行时的多态性   函数重载   运算符重载   虚函数   应用举例   难点   函数重载   虚函数   运算符重载   纯虚函数和抽象类   要求  掌握:   运行时的多态性   函数重载  了解:   运算符重载   虚函数 4.1 编程时的多态性与运行时的多 态性  所谓多态性就是不同对象收到相同的信息时,产生不同 的动作。也就是说,多态性是指用一个名字定义不同的 函数,这些函数执行不同但又类似的操作,即用同样的 接口访问功能不同的函数,从而实现“一个接口,多种 方法”。  在C++中,多态性的实现和联编这一概念有关。一个源 程序经过编译、连接,成为可执行文件的过程是把可执 行代码联编在一起的过程。其中在运行之前就完成的联 编称为静态编,又叫前期联编;而在程序运行时才完成 的联编叫动态联编,也称后期联编。  静态联编是指系统在编译时就决定如何实现某一 动作。静态联编要求在程序编译时就知道调用函 数的全部信息。因此,这种联编类型的函数调用 速度很快。效率高是静态联编的主要优点。  动态联编是指系统在运行时动态实现某一动作。 采用这种联编方式,一直要到程序运行时才能确 定调用哪个函数。动态联编的主要优点是:提供 了更好的灵活性、问题抽象性和程序易维护性。  静态联编支持的多态性称为编译时多态性,也称 静态多态性。在C++中,编译时的多态性是通过 函数重载和运算重载实现的。  动态联编所支持的多态性称为运行时的多态性, 也称动态多态性。在C++中,运行时的多态性是 通过继承和虚函数来实现的。下面分别对他们进 行讨论。 4.2 函数重载 编译时的多态性可以通过函数重载来实 现。函数重载的意义在于它能用同一个 名字访问一组相关的函数,即可以有多 个同名但参数形式不完全相同的函数。 在调用时无需记忆多个函数名,编译器 根据实参的类型来确定应该调用哪一个 函数。两个或两个以上的函数共用一个 函数名称为函数重载,被重载的函数称 为重载函数。  函数重载无须特别声明,只要所定义的函数与 已定义的同名函数形参形式不完全相同,C++ 编译器就认为是函数重载。例如以下两个函数: void GetTime(long *ticks); Void GetTime(int* hours,int* minutes,int *seconds); 它们作用相同,都是返回当前时间,只是其返 回时间的形式不同,使用相同的函数名,但其 参数形式不同。 例4-1 求一个数的平方 # includeiostream.h int square(int i) {return i*i;} float square(float f) {return f*f;} double square(double d) {return d*d;} int main() {int i=12; float f=3.4; double d=5.67; couti*i=square(i)endl; coutf*f=square(f)endl; coutd*d=square(d)endl; return 0; } 程序运行结果为: 12*12=144 3.4*3.4=11.56 5.67*5.67=32.1489  程序中定义了三个名为square的函数,它们的 函数原型不同,编译器在遇到程序中对square 函数的调用时根据参数形式进行匹配,如果找 不到相对应的参数形式的函数定义,编译器认 为该函数没有函数原型,给出错误信息。  函数重载时应注意,如果某个函数参数有缺省 值,必须保证其参数缺省后调用形式不与其他 函数混淆。例如下面的重载是错误的:  int f(int a,float b);  void f(int a,float b,int c=0); 因为第二个函数缺省参数c后,其形式与第一个 函数参数形式相同,下面的函数调用语句: f(10,2.0

您可能关注的文档

文档评论(0)

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

1亿VIP精品文档

相关文档