第7章 多态性和虚函数.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文档。上传文档
查看更多
7.1 静态联编和动态联编 联编分为静态联编和动态联编。 在编译阶段决定执行哪个同名函数被调用,这称为静态联编; 而在编译阶段不能决定执行哪个同名函数被调用,只有在执行阶段才能依据要处理的对象类型来决定执行哪个类的成员函数,称为动态联编。 【例7-1】以下是一个静态联编的例子,分析程序的执行结果。 #include iostream.h class point { int x,y; public: point( int x1,int y1) { x=x1;y=y1; } int area( ) { cout点的面积为:; return 0; } }; class Rect: public point { int l,w; public: Rect( int x1,int y1,int l1,int w1): 7.2 虚函数和抽象类 7.2.1 虚函数的定义 虚函数的定义方法如下 总结动态联编的实现需要如下三个条件 7.2.2 纯虚函数 纯虚函数的声明格式如下: 7.2.3 抽象类 带有纯虚函数的类称为抽象类。抽象类不能产生对象。 7.3 应用实例 【例7-5】编写一个程序计算正方形、球体和圆柱体的表面积和体积。 类container 纯虚函数说明: surface_area(),volume()类cube 纯虚函数实现: surface_area(),volume()类sphere 纯虚函数实现: surface_area(),volume()类cylinder 纯虚函数实现: surface_area(),volume()图7-2 类层次 (3) 由抽象基类,派生出要描述的正方形、球体和圆柱体3个类,即cube、sphere和cyliner,在这3个类中都具有求表面积和体积的重定义版本。 习题七 1. 什么是多态性?如何实现多态性? 2. 设有如下的类层次结构: struct A { int b; void fun(int); }; struct B : A { void b(); void fun(double); }; struct C : A, B{ }; 定义对象 B b; C c; 后,下面的语句各能访问哪些成员?为什么? (1)b.b(); (2)b.fun(); (3)c.b(); (4)c.fun(5); 如果把上面的struct都改为class,类层次结构应如何修改? 第7章 多态性和虚函数 本章要点 通过本章的学习,使读者: ? 了解静态联编和动态联编的概念 ? 掌握虚拟函数的声明、定义方法和访问属性 ? 理解纯虚函数和抽象类的概念,掌握纯虚函数和抽象类的定义方法 point (x1,y1) { l=l1; w=w1; } int area( ) { return (l*w); } }; void fun (point p) { cout p.area( ) endl; } void main( ) { Rect rec(2,4,10,6); fun(rec); } 程序运行结果如下 : 点的面积为:0 virtual 函数类型虚函数名(参数列表); ① 类的静态成员函数不可以定义为虚函数。 ② 类的构造函数不可以定义为虚函数。 ③ 非类的函数不可以定义为虚函数。 定义虚函数要遵循的规定 (1) 要有说明的虚函数。 (2) 调用虚函数操作的是指向对象的指针或者对象引用。 (3) 由成员函数调用虚函数。 virtual 函数类型虚函数名(参数表)= 0; 纯虚函数不可以被直接调用,也不可以被继承。 ·抽象类只能用作其他类的基类,不能建立抽象类对象。 ·抽象类不能用作参数类型、函数返回类型或显式转换的类型。 ·可以说明指向抽象类的指针和引用,此指针可以指向它的派生类,进而实现多态性。 对于抽象类的使用有几点规定 编程要点: (1) 从正方形、球体和圆柱体的各种运算中抽象出一个公共基类container为抽象基类。 (2) 在抽象基类中,定义求表面积和体积的2个纯虚函数。抽象类中定义一个公共的数据成员radius,可作为球的半经、正方体边长、圆柱体的底面半经。 类container 纯虚函数说明: surface_area(),volume() 类cube 纯虚函数实现: surface_area(),volume() 类sph

文档评论(0)

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

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

1亿VIP精品文档

相关文档