C++程序设计大学教程 教学课件 王春玲 第8章 虚函数与多态性.ppt

C++程序设计大学教程 教学课件 王春玲 第8章 虚函数与多态性.ppt

ID:50041759

大小:944.50 KB

页数:15页

时间:2020-03-08

C++程序设计大学教程 教学课件 王春玲 第8章 虚函数与多态性.ppt_第1页
C++程序设计大学教程 教学课件 王春玲 第8章 虚函数与多态性.ppt_第2页
C++程序设计大学教程 教学课件 王春玲 第8章 虚函数与多态性.ppt_第3页
C++程序设计大学教程 教学课件 王春玲 第8章 虚函数与多态性.ppt_第4页
C++程序设计大学教程 教学课件 王春玲 第8章 虚函数与多态性.ppt_第5页
资源描述:

《C++程序设计大学教程 教学课件 王春玲 第8章 虚函数与多态性.ppt》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库

1、虚函数与多态性第8章8.1多态性多态性就是指同样的消息被类的不同对象接收时导致的完全不同的行为的一种现象。这里所说的消息即对类的成员函数的调用,不同的行为是指不同的实现,也就是调用了不同的函数。多态性实质是指同一个函数的多种形态。2联编:是指把一个消息和一个方法联系在一起也就是把一个函数名与其实现代码联系在一起实质是把一个标识符名和一个存储地址联系在一起的过程。根据实现联编的阶段的不同,可将其分为静态联编和动态联编两种。8.1.1多态的类型3两种联编过程分别对应着多态的两种实现方式。在编译时的多态是通过静态联编实现的而在运行时的多态则是通过动态联编实现的。普通函数及类的成

2、员函数的重载就实现了一种多态性。8.1.2多态的实现48.2赋值兼容规则赋值兼容规则是指在公有继承情况下,对于某些场合,一个派生类的对象可以作为基类对象来使用,也就是在需要基类对象的任何地方都可以使用公有派生类的对象来替代。5赋值兼容规则包括以下三种情况(假设类B为基类,类D为类B的公有派生类):(1)派生类的对象可以赋值给基类对象Dd;Bb;b=d;(2)派生类的对象可以初始化为基类的引用Dd;B&b=d;(3)派生类对象的地址可以赋给指向基类的指针Dd;B*bp=&d;6由上述对象赋值兼容规则可知:一个基类的对象可兼容派生类的对象;一个基类的指针可指向派生类的对象;一

3、个基类的引用可引用派生类的对象;于是,对于通过基类的对象指针(或引用)对成员函数的调用,编译时无法确定对象的类,而只有在运行时才能确定并由此确定该调用哪个类的成员函数。一个公有派生类的对象可以提供其基类对象的全部行为(基类的全部接口);也就是说,在程序中可以把一个公有派生类对象当作其基类对象来处理。【例8-1】赋值兼容规则的概念及实现。78.3基类指针和公有派生类对象基类指针、派生类指针、基类对象和派生类对象四者间有以下4种组合的情况:(1)直接用基类指针指向基类对象。(2)直接用派生类指针指向派生类对象。(3)用基类指针引用其派生类对象。(4)用派生类指针引用基类对象。

4、基类指针仅能访问派生类中的基类部分强制类型转换【例8-2】基类指针、派生类指针、基类对象和派生类对象四者间组合的使用情况示例。8基类指针指向公有派生类对象BaseDerive公有继承基类成员基类成员新增成员98.4虚函数class类名{virtual类型函数名(参数表);};说明:(1)虚函数声明只能出现在类声明中的函数原型声明中,而不能在成员函数的函数体实现的时候。(2)只有类的普通成员函数才能声明为虚函数,全局函数及静态成员函数不能声明为虚函数。10(3)虚函数可以在一个或多个派生类中被重新定义,因此,它属于函数重载的情况。它要求在派生类中重新定义时必须与基类中的函数

5、原型完全相同。这时,无论在派生类的相应成员函数前是否加上关键字virtual,都将其视为虚函数;11(4)当一个类的成员函数声明为虚函数后,就可以在该类的(直接或间接)派生类中定义与其基类虚函数原型相同的函数。这时,当用基类指针指向这些派生类对象时,系统会自动用派生类中的同名函数来代替基类中的虚函数。也就是说,当用基类指针指向不同派生类对象时,系统会在程序运行中根据所指向对象的不同,自动选择适当的成员函数,从而实现了运行时的多态性。【例8-3】虚函数的定义与应用。128.5纯虚函数与抽象类8.5.1纯虚函数在定义一个表达抽象概念的基类时,有时可能会无法给出某些成员函数的具

6、体实现。这时,就可以将这些函数声明为纯虚函数。virtual函数原型=0;纯虚函数是只在基类中声明虚函数但未给出具体的函数定义体;它的具体定义放在各派生类中。13声明了纯虚函数的类,称为抽象类。抽象类的主要作用:通过它为一个类族建立一个公共的接口,使它们能够更有效地发挥多态特性。抽象类声明了一族派生类的共同接口,而接口的完整实现,即纯虚函数的函数体,要由派生类自己定义。【例8-4】设计一个抽象类Shape,它表示具有形状的东西,在它下面可以派生出多种具体形状,比如三角形、圆形、矩形等,并求出各种形状的面积。8.5.2抽象类14(1)抽象类只能用作基类来派生新类,不能声明抽

7、象类的对象,但可以声明指向抽象类的指针变量和引用变量。(2)抽象类中可以有多个纯虚函数。(3)抽象类中也可以定义其他非纯虚函数。(4)抽象类派生出新类之后,如果在派生类中没有重新定义基类中的纯虚函数,则必须再将该虚函数声明为纯虚函数,这时,这个派生类仍然是一个抽象类;(5)在一个复杂的类继承结构中,越上层的类抽象程度就越高,有时甚至无法给出某些成员函数的具体实现。(6)引入抽象类的目的主要是为了能将相关类组织在一个类继承结构中,并通过抽象类来为这些相关类提供统一的操作接口。8.5.3使用纯虚函数与抽象类的注意事项15

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。