C++程序设计 教学课件 作者 王春玲 第7章.ppt

C++程序设计 教学课件 作者 王春玲 第7章.ppt

ID:50081987

大小:149.00 KB

页数:16页

时间:2020-03-08

C++程序设计 教学课件 作者 王春玲 第7章.ppt_第1页
C++程序设计 教学课件 作者 王春玲 第7章.ppt_第2页
C++程序设计 教学课件 作者 王春玲 第7章.ppt_第3页
C++程序设计 教学课件 作者 王春玲 第7章.ppt_第4页
C++程序设计 教学课件 作者 王春玲 第7章.ppt_第5页
资源描述:

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

1、第7章虚函数与多态性本章主要内容1.多态性的类型和实现。2.虚函数机制的要点。3.纯虚函数与抽象类。7-1多态性多态性就是指同样的消息被类的不同对象接收时导致的完全不同的行为的一种现象。这里所说的消息即对类的成员函数的调用,不同的行为是指不同的实现,也就是调用了不同的函数。多态性实质是指同一个函数的多种形态。联编:是指把一个消息和一个方法联系在一起也就是把一个函数名与其实现代码联系在一起实质是把一个标识符名和一个存储地址联系在一起的过程。根据实现联编的阶段的不同,可将其分为静态联编和动态联编两种。这两种联编过程分别对应着多态的两种实现方

2、式。在编译时的多态是通过静态联编实现的而在运行时的多态则是通过动态联编实现的。普通函数及类的成员函数的重载就实现了一种多态性。7-1-1多态的类型在公有继承的情况下,对于某些场合,一个派生类的对象可以作为基类对象来使用。具体来说,包括以下三种情况(假设类B为基类,类D为类B的公有派生类):(1)派生类的对象可以赋值给基类对象,如:Dd;Bb;b=d;(2)派生类的对象可以初始化为基类的引用,如:Dd;B&b=d;(3)派生类对象的地址可以赋给指向基类的指针,如:Dd;B*bp=&d;7-1-2多态的实现【例7-1】分析以下程序的执行结果

3、。7-1-3基类指针和公有派生类对象基类指针、派生类指针、基类对象和派生类对象四者间有以下4种组合的情况:(1)直接用基类指针指向基类对象。(2)直接用派生类指针指向派生类对象。(3)用基类指针引用其派生类对象。(4)用派生类指针引用基类对象。基类指针仅能访问派生类中的基类部分强制类型转换【例7-2】基类指针、派生类指针、基类对象和派生类对象四者间组合的使用情况示例。基类指针指向公有派生类对象BaseDerive公有继承基类成员基类成员新增成员7-2虚函数class类名{virtual类型函数名(参数表);};说明:(1)虚函数声明只能

4、出现在类声明中的函数原型声明中,而不能在成员函数的函数体实现的时候。(2)只有类的普通成员函数才能声明为虚函数,全局函数及静态成员函数不能声明为虚函数。(3)虚函数可以在一个或多个派生类中被重新定义,因此,它属于函数重载的情况。它要求在派生类中重新定义时必须与基类中的函数原型完全相同。这时,无论在派生类的相应成员函数前是否加上关键字virtual,都将其视为虚函数;(4)当一个类的成员函数声明为虚函数后,就可以在该类的(直接或间接)派生类中定义与其基类虚函数原型相同的函数。这时,当用基类指针指向这些派生类对象时,系统会自动用派生类中的同

5、名函数来代替基类中的虚函数。也就是说,当用基类指针指向不同派生类对象时,系统会在程序运行中根据所指向对象的不同,自动选择适当的成员函数,从而实现了运行时的多态性。【例7-3】虚函数的定义与应用举例。7-3纯虚函数与抽象类1.纯虚函数在定义一个表达抽象概念的基类时,有时可能会无法给出某些成员函数的具体实现。这时,就可以将这些函数声明为纯虚函数。virtual函数原型=0;纯虚函数是只在基类中声明虚函数但未给出具体的函数定义体;它的具体定义放在各派生类中。2.抽象类声明了纯虚函数的类,称为抽象类。抽象类的主要作用:通过它为一个类族建立一个公

6、共的接口,使它们能够更有效地发挥多态特性。抽象类声明了一族派生类的共同接口,而接口的完整实现,即纯虚函数的函数体,要由派生类自己定义。【例7-4】设计一个抽象类Shape,它表示具有形状的东西,在它下面可以派生出多种具体形状,比如三角形、圆形、矩形等,并求出各种形状的面积。3.使用纯虚函数与抽象类的注意事项(1)抽象类只能用作基类来派生新类,不能声明抽象类的对象,但可以声明指向抽象类的指针变量和引用变量。(2)抽象类中可以有多个纯虚函数。(3)抽象类中也可以定义其他非纯虚函数。(4)抽象类派生出新类之后,如果在派生类中没有重新定义基类中

7、的纯虚函数,则必须再将该虚函数声明为纯虚函数,这时,这个派生类仍然是一个抽象类;(5)在一个复杂的类继承结构中,越上层的类抽象程度就越高,有时甚至无法给出某些成员函数的具体实现。(6)引入抽象类的目的主要是为了能将相关类组织在一个类继承结构中,并通过抽象类来为这些相关类提供统一的操作接口。7-4本章小结本章主要介绍了面向对象程序设计中最重要的机制之一——多态性。(1)多态性是指同样的消息被类的不同对象接收时导致的完全不同的行为的一种现象。在C++程序设计中,消息即对类的成员函数的调用,不同的行为是指不同的实现,也就是调用了不同的函数。(

8、2)C++中的多态有两种类型:一种是编译时的多态,另一种是运行时的多态。编译时的多态是通过静态联编实现的,而运行时的多态则是通过动态联编实现的。(3)在公有继承的情况下,对于某些场合,一个派生类对象可以作为

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

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

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