第11章多态性与虚函数.pptVIP

  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文档。上传文档
查看更多
第十一章 多态性与虚函数 案例一 函数重载 1. 问题描述 设计程序实现同一个函数Area根据提供参数的个数不同,分别实现圆和矩形面积的计算。 2. 问题分析 注意本案例中函数重载时的依据是什么,函数的类型、参数个数、参数类型等的不同。本例中函数重载(计算面积的函数,输入一个数,视为圆形;输入两个数,视为矩形,分别计算面积) 3. ?C++?代码 #include iostream.h #define PI 3.14 float Area(float r) {return PI*r*r;} float Area(float a, float b) {return a*b;} void main() { float r, a, b; //r作为圆的半径,a、b分别作为矩形的长和宽。 cout请输入圆的半径; cinr; cout请输入矩形的长:; cina; cout请输入矩形的宽:; cinb; cout圆的面积为:Area(r) 矩形的面积为:Area(a, b)endl; // Area(r)和Area(a, b)参数个数和类型不同 } 4. 程序运行结果 请输入圆的半径19 请输入矩形的长:5 请输入矩形的宽:4 圆的面积为:1133.54 矩形的面积为:20 11.1 多?态?性?概?述 用同一个名字来访问不同函数的性质被称作多态性。也就是说不同对象收到相同的消息时,产生不同的动作,比如让狗和鱼不同的两个对象移动,则狗会走,鱼会游。使用多态性,一些相似功能的函数可用同一个名字来定义,这不仅使得概念上清晰,还可达到动态链接的目的,实现运行时的多态性。 在C++?中,多态性的实现和联编这一概念有关。一个源程序经过编译、链接,成为可执行文件的过程就是联编。联编分为两类:静态联编和动态联编。静态联编,也称前期联编,是指在运行之前就完成的编译;动态联编,也称后期联编,是指在程序运行时才完成的编译。 静态联编支持的多态性称为编译时多态性,也称静态多态性。在C++?中,编译时多态性是通过函数重载和运算符重载实现的。动态联编支持的多态性称为运行时多态性,也称动态多态性。在C++?中,运行时多态性是通过继承和虚函数来实现的。 11.2 函 数 重 载 编译时的多态性可以通过函数重载来实现。函数重载有两种情况:一是参数有所差别的重载,意义在于它能用同一个名字访问一组相关的函数,在前面我们已经做过介绍;再一个是函数所带参数完全相同,只是它们属于不同的类,这些类之间一般有继承和派生关系。 例11.1 在基类和派生类中函数重载。 #includeiostream.h class Base{//基类 int x, y; public: Base(int a, int b) { x=a; y=b;} void display()//基类中的display()函数 { cout执行基类中的display()函数endl; coutx, yendl; } }; class Derived:public Base{//派生类Derived,Base公有派生出Derived类 int z; public: Derived(int a, int b, int c):Base(a, b) { z=c; } void display() //派生类中的display()函数 { cout执行派生类中的display()函数endl; coutzendl; } }; main() { Base b(20, 20); Derived d(8, 8, 30); b.display(); //执行基类中的display()函数 d.display(); //执行派生类中的display()函数 d.Base::display(); //执行基类中的display()函数 } 在基类和派生类中进行函数重载时,用以下两种方法可以在编译时区别重载函数: (1) 使用对象名加以区分。例如:b.display()和d.display()分别调用类Base和Derived的display()函数。派生类中会隐藏基类中与派生类同名的成员。 (2) 使用“类名::”加以区分。例如:d.Base::display()调用的是Base的display()函数。 案例二 运算符重载 1. 问题描述 将运算符“+”重载为复数的成员函数(复数的加法运算)。 2. 问题分析 注意掌握运算符如何重载为类的成员函数方式

文档评论(0)

你找对了 + 关注
实名认证
文档贡献者

正版课件均可编辑 注意:其它人很多盗版P P T都是图片形式,买到请直接投诉退款!

1亿VIP精品文档

相关文档