C++面向对象程序设计(第二版) 教学课件 ppt 作者 张俊 Ch08-虚函数与多态性

上传人:E**** 文档编号:89494241 上传时间:2019-05-25 格式:PPTX 页数:42 大小:533.29KB
返回 下载 相关 举报
C++面向对象程序设计(第二版) 教学课件 ppt 作者 张俊 Ch08-虚函数与多态性_第1页
第1页 / 共42页
C++面向对象程序设计(第二版) 教学课件 ppt 作者 张俊 Ch08-虚函数与多态性_第2页
第2页 / 共42页
C++面向对象程序设计(第二版) 教学课件 ppt 作者 张俊 Ch08-虚函数与多态性_第3页
第3页 / 共42页
C++面向对象程序设计(第二版) 教学课件 ppt 作者 张俊 Ch08-虚函数与多态性_第4页
第4页 / 共42页
C++面向对象程序设计(第二版) 教学课件 ppt 作者 张俊 Ch08-虚函数与多态性_第5页
第5页 / 共42页
点击查看更多>>
资源描述

《C++面向对象程序设计(第二版) 教学课件 ppt 作者 张俊 Ch08-虚函数与多态性》由会员分享,可在线阅读,更多相关《C++面向对象程序设计(第二版) 教学课件 ppt 作者 张俊 Ch08-虚函数与多态性(42页珍藏版)》请在金锄头文库上搜索。

1、C+与面向对象程序设计,1,面向对象程序设计,第8章 虚函数与多态性,C+与面向对象程序设计,2,内容提要,8.1虚函数virtual function 8.2纯虚函数和抽象类 abstract class 8.3多态性 polymorphism,C+与面向对象程序设计,3,第8章 虚函数与多态性,8.1 概述,C+与面向对象程序设计,4,8.1.1回顾赋值兼容规则,public继承时,派生类对象是基类对象.,C+与面向对象程序设计,5,8.1.1回顾赋值兼容规则,基类对象可以赋值为派生类对象. 对象切割(丢失了派生类的部分信息) LSP(Liskov Substitution Princip

2、le) 派生类应用于基类的场合 三段论:规则+前提结论,C+与面向对象程序设计,6,8.1.1回顾赋值兼容规则,为避免丢失派生类对象的信息: 基类指针和基类引用可以指向派生类对象. 以基类名义存储派生类对象. 好处:操作的统一,C+与面向对象程序设计,7,8.1.1示例操作的统一,例8.1:形状类的名称和面积,C+与面向对象程序设计,8,8.1.1示例操作的统一,例8.1:形状类的名称和面积,C+与面向对象程序设计,9,8.1.1示例操作的统一,例8.1:形状类的名称和面积,C+与面向对象程序设计,10,8.1.1问题派生类的个性没了?,以基类名义存储的派生类对象怎么展现派生类的特点? 示例

3、欠缺:根据对象指针或对象引用所指对象的实际类型,调用正确的函数.绑定(binding),C+与面向对象程序设计,11,8.1.1分析关于绑定,绑定:函数调用与函数定义之间的对应 两种类型: 静态绑定 动态绑定,C+与面向对象程序设计,12,8.1.1分析两种绑定方式,两种方式对比,8.1.2示例静态绑定示例,普通函数:,C+与面向对象程序设计,13,8.1.2示例静态绑定示例,基类指针对操作的调用,C+与面向对象程序设计,14,8.1.2小结静态绑定规则,在发生静态绑定时,所调用的函数由对象指针(或对象引用)的类型决定.,C+与面向对象程序设计,15,8.1.3示例动态绑定示例,我们希望:,C

4、+与面向对象程序设计,16,8.1.3小结动态绑定规则,在发生静态绑定时,所调用的函数由对象指针(或对象引用)本身的类型决定.(只看表面) 在发生动态绑定时,所调用的函数由对象指针(或对象引用)所指对象的类型决定.(探究实质),C+与面向对象程序设计,17,C+与面向对象程序设计,18,第8章 虚函数与多态性,8.2 虚函数,C+与面向对象程序设计,19,8.2.1虚函数(virtual function),定义的语法 virtual (基类)成员函数原型;,C+与面向对象程序设计,20,8.2.1虚函数(virtual function),定义虚函数时不需virtual关键字。,C+与面向对

5、象程序设计,21,8.2.1虚函数(virtual function),保持接口一致 否则不认为是虚函数,C+与面向对象程序设计,22,8.2.1虚函数(virtual function),必须通过对象指针调用虚函数,才能实现动态绑定.,C+与面向对象程序设计,23,8.2.1虚函数(virtual function),也可以通过对象引用调用虚函数,来实现动态绑定.,C+与面向对象程序设计,24,8.2.1虚函数(virtual function),如果通过对象调用虚函数,是不能实现动态绑定的.,C+与面向对象程序设计,25,8.2.2应用示例,典型应用: P323:例8.2 Person类及

6、其派生类 P324:例8.3 计算器类Calculator及其派生类,C+与面向对象程序设计,26,8.2.2应用示例,非典型应用: P326:例8.4仅需理解 P327:例8.5仅需理解,C+与面向对象程序设计,27,8.2.3虚函数表,动态绑定的实现机制 复杂的三级指针,C+与面向对象程序设计,28,8.2.3虚函数表,虚函数对对象的影响 P329:例8.6,C+与面向对象程序设计,29,8.2.4虚析构函数,构造函数不能为虚函数 析构函数应为虚函数. P331:例8.8,C+与面向对象程序设计,30,8.2.4动态关联的三个特点,基类中定义有虚函数; 从基类继承并重定义该虚函数; 对象指

7、针或者引用访问;,C+与面向对象程序设计,31,8.2.4总结几个关键字,可修饰函数者 inline static extern friend virtual,C+与面向对象程序设计,32,第8章 虚函数与多态性,8.4 纯虚函数和抽象类,C+与面向对象程序设计,33,需要纯虚函数(pure virtual function)的原因:某些类太抽象,实现函数没有意义 纯虚函数的语法 virtual 成员函数原型 = 0; 纯虚函数与虚函数的区别(pure),8.4.1纯虚函数,C+与面向对象程序设计,34,8.4.2抽象类/抽象基类,定义:具有纯虚函数的类 作用:为子类提供共同的接口 说明: 1

8、. 只能作为基类被继承。 2.如果派生类没有定义纯虚函数,则派生类仍然是抽象类。,C+与面向对象程序设计,35,8.4.2抽象基类的指针/引用,3.不能生成具体的对象,但是可以生成对象指针和对象引用。 4.抽象基类的对象不能用作函数参数和返回类型,但是指针/引用可以。 5.抽象基类的指针/引用不能调用纯虚函数,但是可以调用非纯虚函数。,C+与面向对象程序设计,36,8.4.3抽象类与具体类,含义太宽泛而定义不出实在对象的类都应该定义为抽象类。 能够实例化对象的类就称为具体类。,C+与面向对象程序设计,37,8.4.4综合举例,C+与面向对象程序设计,38,C+与面向对象程序设计,39,C+与面向对象程序设计,40,C+与面向对象程序设计,41,C+与面向对象程序设计,42,本章小结,静态绑定与动态绑定 虚函数 纯虚函数与抽象基类 多态性及其应用,

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 高等教育 > 大学课件

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号