- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
c课件第十章-虚函数和多态性
第十章 虚函数和多态性 10.1 虚函数 10.2 抽象基类和具体类 10.3 多态性 10.4 其他 10.1 虚函数 1、虚函数的引入 我们知道从基类中可以派生出很多子类,而子类根据自 身的特性要求来修改父类中的方法,通常我们命名相同的 方法来覆盖基类的方法; 现在我们想能否通过基类的方法,在程序执行过程中, 如何动态地确定到底使用哪个类中的同名方法; 为此,引入虚函数---将基类中的需要在子类中重定义的 函数声明前加 virtual ?称为虚函数。 2、例子1 若 类 Circle、 Triangle、Rectangle 、Square 都继承与 Shape(基类),而每个类都重写基类的draw 函数; 因为每个子类对象也是父类对象;如果将子类对象作为 父类对象处理;为了动态确定调用哪个类的draw, 将基类 的draw 声明为虚函数; 如: virtual void draw() const; Shape *shapePtr = 0;// or 引用 Shape s=c; //Circle c; shapePtr ? draw(); 程序执行时动态选择派生类的draw, 这称为动态关联; IF 用特定的对象,Circle c; c. draw(); //编译时确定调 用Circle的draw() ,称为静态关联; 3、例子2 通过将一个函数定义成虚函数来实现运行时的多态。如 果一个函数被定义为虚函数,那么,即使是使用指向基类 对象的指针来调用该成员函数,C++也能保证所调用的是 正确的特定于实际对象的成员函数。 如果类c1,c2…由基类base派生而来,base有一个用 virtual修饰的公有或保护函数成员f(),而在c1,c2…中的 一些类中重新定义了成员函数f(),而对f()的调用都是通过 级基类的对象或指针进行的,在程序执行时才决定是调用 c1还是c2或其他派生类中定义的f(),这样的函数f()称为虚 函数。 4、使用注意1 A、虚函数具有遗传性,父类中为虚函数,则子类中自 动默认为虚函数;通常为提高清晰性,在子类中显示声明 这些虚函数;虚函数提供了一种接口界面,可以在一个或 多个派生类中被重定义。 B、在派生类重定义虚函数时必须有相同(完全一致)的函数原 型,包括返回类型,函数名、参数个数、参数类型的顺序必须相 同,否则就属于重载(参数不同)。 C、虚函数必须是类的成员函数;不能为全局函数、静态函数。 不能将友员说明为虚函数,但虚函数可以是另一个类的友员。析构 函数可以是虚函数(一般地将,若某类中定义有虚函数,则其析构 函数也应为虚函数),但构造函数不能为虚函数。 5、使用注意2 A、在类体系中访问一个虚函数时,应使用指向基类类 型的指针或对基类类型的引用,以满足运行时多态性的要 求;当然也可以像调用普通成员函数那样利用对象名来调 用一个函数。 B、若在派生类中没有重新定义虚函数,则该类的对象 将使用其基类中的虚函数代码。 C、一个类的虚函数仅对派生类中重定义的函数起作 用,对其他函数没有影响。在基类中使用虚函数保证了通 过指向基类对象的指针调用基类的一个虚函数时,C++系 统对该调用进行动态绑定,而使用普通函数则是静态绑 定。 6、虚函数与重载函数的比较 重载函数要求函数有相同的返回值类型和函数名称,并 有不同的参数序列;而虚函数则要求这三项(函数名、返 回值类型和参数序列)完全相同; 重载函数可以是成员函数或友员函数,而虚函数只能是 成员函数; 重载函数的调用是以所传递参数序列的差别作为调用不 同函数的依据;虚函数是根据对象的不同去调用不同类的 虚函数; 虚函数在运行时表现出多态功能,这是C++的精髓;而 重载函数则在编译时表现出多态性。 10.2 抽象基类和具体类 1、抽象类、抽象基类、具体类---概念 定义不能实例化为任何对象的类(抽象类)如Java中的interface, 让其他类继承根据需要来实现接口;相对的,能实例化的类为具体 类; 由于抽象类必须用作其他类的基类,故称为抽象基类; 2、如何定义抽象类? 如果将带有虚函数的类中的一个或多个虚函数声明为纯虚函数, 则该类就成为抽象类; 纯虚函数为声明时初始化值为0的函数;如: virtual float earning() const = 0; 因为纯虚函数没有定义,故抽象类不能实例化对象; 3、使用注意 抽象类中不仅包括纯虚函数,也可包括虚函数; IF 某个类是从抽象基类派生的,且在该派生类中没有 提供抽象基类中纯虚函数的定义;那么派生类中该函数仍 为纯虚函数,所以该派生类也是抽象(基)类—
您可能关注的文档
- 2017年福建公务员面试真题.docx
- c++课件 第三章 函数.ppt
- c++课件 第十一章-C++输入输出流.ppt
- c++课件 第四章 数组.ppt
- c++课件 第一章 计算机与C++编程简介.ppt
- 2017年临床路径工作实施方案.docx
- 110荣成十二中“研究性学习的理论与实践”课题研究实施方案.doc
- 18 清华大学 计算机组成原理 第4章第5讲 4_5.ppt
- 21 清华大学 计算机组成原理 第5章第2讲 5_2.ppt
- 02 清华大学 计算机组成原理 第2章第1讲.ppt
- 贵州贵州省建设投资集团有限公司招聘考试真题附答案详解(研优卷).docx
- 河南南阳师范学院2021年招聘25名硕士研究生冲刺卷一(附答案与详解)及答案详解(名校卷).docx
- 陕西延长石油 (集团) 有限责任公司 所属单位招聘笔试题库及答案详解(必刷).docx
- 贵州民航产业集团有限公司招聘笔试题库含答案详解(基础题).docx
- 广汉市2025年公开招聘社区专职工作者(125人)考试备考题库含答案详解(考试直接用).docx
- 邢台市水务发展集团有限公司招聘真题附答案详解(实用).docx
- 新华保险总部人力资源部(党委组织部)招聘笔试题库含答案详解(预热题).docx
- 贵州苔茶产业发展集团有限公司招聘笔试题库含答案详解(b卷).docx
- 广汉市2025年公开招聘社区专职工作者(125人)考试备考题库附答案详解(综合题).docx
- 贵州城乡产业发展集团有限公司招聘笔试题库附答案详解(实用).docx
文档评论(0)