第6章 多态性和抽象类.pdfVIP

  1. 1、本文档共24页,可阅读全部内容。
  2. 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  5. 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  6. 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  7. 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  8. 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
第六章 多态性和抽象类 目 录 6.1多态概念 6.3 纯虚函数与抽象类 6.1.1 静态联编 6.1.2 动态联编 6.2 虚函数 6.2.1 虚函数意义 6.2.2 虚函数定义 6.2.3 虚函数访问 6.2.4 虚函数表 6.2.5 虚构造函数 6.2.6 虚析构函数 6.1 多态的概念 • 多态(Polymorphism)是面向对象的精髓,多态是指同 一个操作作用于不同的对象就会产生不同的响应,简单地 概括为“一个接口、多种方法”。 – 函数重载就是一种简单的多态,一个函数名(调用接 口),对应着几个不同的函数原型(方法)。 – 多态分为静态多态性(静态联编)和动态多态性(动态 联编) – 程序调用函数时,具体使用哪个代码块由编译器已经决 定。这种在编译过程中完成的联编叫静态联编。函数重 载、派生类的函数重写、模板函数属于静态联编。 – 编译器无法在编译过程中完成联编,必须在程序运行时 完成选择,这叫动态联编。C++通过虚函数实现动态联 编。 3 6.1.1 静态联编(通过对象的类型区别) • 静态联编就是一般的函数重写(override),重新在派 生类中定义基类的同名函数 class point { float area(){return 0.0;} }; class circle:public point { float area( ){return 3.14159*r*r;} }; int main( ) { point p; p.area( ); 调用point类的函数 circle c; c.area( ); 调用circle类的函数 return 0; } 4 6.1.2 动态联编 • 棋手的基本活动是下棋,但是对不同类型的棋手,下棋的内容不一样. • 按OOP的观念,棋手是基类,中国象棋手,围棋手和国际象棋手,是派生类. • 下棋是所有棋手类的方法.由具体的派生类实现下棋的功能. • 当抽象的通用棋手来进行操作时,它会调用具体棋手的实现方法来完成 下棋功能.这就是多态概念 通用棋手 中国象棋手 围棋 国际象棋 • 多态性给我们带来了好处:多态使得我们可以通过基类的引用或指针来 指明一个对象(包含其派生类的对象),当调用函数时可以自动判断调 用的是哪个对象的函数。 5 6.2.1 虚函数意义 为什么要有虚函数 • 通过指针或者引用访问对象成员时,具体要访 问哪个对象只取决于指针的类型,而与用什么 对象给这个指针或者引用赋值无关。 • 在基类的该成员函数前加上virtual关键字,使 之成员虚函数,具体调用基类还是派生类的函 数不再取决于指针或者引用的类型,而是取决 于指针或者引用所指向的对象类型。 演示代码(01_为什么要有虚函数) 6 6.2.2虚函数定义 • 虚函数:为实现某种功能而假设的函数,虚函数只能 是类中的一个成员函数,不能是静态成员 • 格式:virtual 数据类型 函数名(参数) – 首先在基类中声明虚函数(需要具有动态多态性的基类) – 在

文档评论(0)

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

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

1亿VIP精品文档

相关文档