《C++语言基础教程》课程电子教案(PPT教学课件)第8章 多态性和虚函数

清华大学出版社 000000 TSINGHUA UNIVERSITY PRESS 第8章多态性和虚函数
第8章 多态性和虚函数

清华大学出版社 000000 TSINGHUA UNIVERSITY PRESS 8.1函数重载 先解释一下多态性,一个函数名对应多种状态,即多 种实现,像这样一对多的情况称为多态性。 C++语言多态性表现在以下3个方面。 ①函数重载 ②运算符重载 ③动态联编 函数重载 相同函数对应着若干种不同实现,定义重载函数时要 求在参数的个数或类型或顺序上有所不同,以便选择。 在函数调用时根据参数的不同选择不同的实现。 参见[例8.1]
8. 1 函数重载 先解释一下多态性,一个函数名对应多种状态,即多 种实现,像这样一对多的情况称为多态性。 C++语言多态性表现在以下3个方面。 ① 函数重载 ② 运算符重载 ③ 动态联编 函数重载 相同函数对应着若干种不同实现,定义重载函数时要 求在参数的个数或类型或顺序上有所不同,以便选择。 在函数调用时根据参数的不同选择不同的实现。 参见[例8.1]

清华大学出版社 000000 TSINGHUA UNIVERSITY PRESS 8.2运算符重载 (1)什么是运算符重载 系统对已有的运算符已定义其功能,用户还可以重新定义它 的新功能,这就是运算符重载。运算符重载实际上是函数重 载,因为新功能的定义书写在函数体内。同一个运算符的不 同功能的选取由操作数的类型决定的。 (2)哪些运算符可以重载 除了下列4种运算符外,其余运算符都可以重载。不能重载的 运算符是: k
8. 2 运算符重载 (1) 什么是运算符重载 系统对已有的运算符已定义其功能,用户还可以重新定义它 的新功能,这就是运算符重载。运算符重载实际上是函数重 载,因为新功能的定义书写在函数体内。同一个运算符的不 同功能的选取由操作数的类型决定的。 (2) 哪些运算符可以重载 除了下列4种运算符外,其余运算符都可以重载。不能重载的 运算符是: * , ·* ,∷,?:

清华大学出版社 000000 TSINGHUA UNIVERSITY PRESS (3)运算符重载有4个不变 ①优先级不变 ②结合性不变 ③操作数个数不变 ④语法语义不变 (4)运算符重载遵循的原则 ①重载运算符的含义清楚,并且有实际意义 ②重载运算符不能有二义性
(3) 运算符重载有4个不变 ① 优先级不变 ② 结合性不变 ③ 操作数个数不变 ④ 语法语义不变 (4) 运算符重载遵循的原则 ① 重载运算符的含义清楚,并且有实际意义 ② 重载运算符不能有二义性

清华大学出版社 000000 TSINGHUA UNIVERSITY PRESS (5)运算符重载的两种形式 考虑到运算符重载后能够对类中的所有成员(包含私有成员) 都能进行操作,因此运算符重载的形式有两种:一是成员 函数形式,二是友元函数形式 ①重载为类的成员函数 具体格式如下: 〈类型〉 operator〈运算符〉((参数表〉) 参见[例8.2]
(5) 运算符重载的两种形式 考虑到运算符重载后能够对类中的所有成员(包含私有成员) 都能进行操作,因此运算符重载的形式有两种:一是成员 函数形式,二是友元函数形式。 ① 重载为类的成员函数 具体格式如下: 〈类型〉operator〈运算符〉(〈参数表〉) 参见[例8. 2]

清华大学出版社 000000 TSINGHUA UNIVERSITY PRESS ②重载为友元函数 具体格式如下: friend(类型〉 operator〈运算符〉(〈参数表〉) 参见[例8.3]。 比较两种形式的不同点。 (6)运算符重载举例 ①下标运算符 参见[例8.5]。 ②函数调用运算符 参见[例8.7]
② 重载为友元函数 具体格式如下: friend 〈类型〉operator〈运算符〉(〈参数表〉) 参见[例8. 3]。 比较两种形式的不同点。 (6) 运算符重载举例 ① 下标运算符 参见[例8. 5]。 ② 函数调用运算符 参见[例8. 7]

清华大学出版社 000000 TSINGHUA UNIVERSITY PRESS 8.3静态联编和动态联编 1.什么是联编 联编是将被调用的函数连接编译到调用它的程序中。 联编有两种:一种是静态联编,另一种是动态联编。 静态联编是在编译阶段进行联编的,又称早期联编。 动态联编是在运行阶段进行联编的,又称晚期联编。 通常都是静态联编,只有满足一定条件时才会实现动态联编。 2.动态联编的条件 (1)公有继承是基础 (2)虚函数是关键 (3)对象指针或引用作为引导
8. 3 静态联编和动态联编 1. 什么是联编 联编是将被调用的函数连接编译到调用它的程序中。 联编有两种:一种是静态联编,另一种是动态联编。 静态联编是在编译阶段进行联编的,又称早期联编。 动态联编是在运行阶段进行联编的,又称晚期联编。 通常都是静态联编,只有满足一定条件时才会实现动态联编。 2. 动态联编的条件 (1) 公有继承是基础 (2) 虚函数是关键 (3) 对象指针或引用作为引导

清华大学出版社 000000 TSINGHUA UNIVERSITY PRESS 8.4虚函数 虚函数是一种非静态的成员函数,说明虚函数的方法如下: virtual〈类型〉〈函数名〉(〈参数表〉) 虚函数具有如下特征: ①虚函数是在基类和派生类中说明相同而实现不同的成员函 数 ②基类中说明的虚函数具有下传给派生类的性质 ③构造函数不能说明为虚函数,而析构函数可以说明为虚函 数 参见[例8.8]、[例8.9]、[例8.10]、[例8.1]、 例8.13]
8. 4 虚函数 虚函数是一种非静态的成员函数,说明虚函数的方法如下: virtual 〈类型〉〈函数名〉(〈参数表〉) 虚函数具有如下特征: ① 虚函数是在基类和派生类中说明相同而实现不同的成员函 数 ② 基类中说明的虚函数具有下传给派生类的性质 ③ 构造函数不能说明为虚函数,而析构函数可以说明为虚函 数 参见[例8. 8]、[例8. 9]、[例8. 10]、[例8. 11]、 [例8. 13]

清华大学出版社 000000 TSINGHUA UNIVERSITY PRESS 8.5纯虚函数和抽象类 1.纯虚函数 纯虚函数是一种没有具体实现的特殊的虚函数。 纯虚函数的定义格式如下: virtual〈类型〉〈函数名〉(〈参数表〉)=0; 个基类内有一个纯虚函数时,则在它的派生类中至少有 个虚函数,否则纯虚函数是无意义的
8. 5 纯虚函数和抽象类 1. 纯虚函数 纯虚函数是一种没有具体实现的特殊的虚函数。 纯虚函数的定义格式如下: virtual 〈类型〉〈函数名〉(〈参数表〉)=0; 一个基类内有一个纯虚函数时,则在它的派生类中至少有一 个虚函数,否则纯虚函数是无意义的

清华大学出版社 000000 TSINGHUA UNIVERSITY PRESS 2.抽象类 含有纯虚函数的类称为抽象类,与此相对应的不含有纯虚函 数的类称为具体类。 抽象类的特点是不能定义对象,只可定义对象指针和对象引 用。 抽象类的主要作用是为其所组织的继承层次结构中提供一个 共的根,纯虚函数的实现由其具体的派生类来提供。 参见[例8.17]。 从例[例8.17中可以体会到面向对象程序设计的层次结构 的特点,这为程序扩展和用户编程提供方便
2. 抽象类 含有纯虚函数的类称为抽象类,与此相对应的不含有纯虚函 数的类称为具体类。 抽象类的特点是不能定义对象,只可定义对象指针和对象引 用。 抽象类的主要作用是为其所组织的继承层次结构中提供一个 公共的根,纯虚函数的实现由其具体的派生类来提供。 参见[例8. 17]。 从例[例8. 17]中可以体会到面向对象程序设计的层次结构 的特点,这为程序扩展和用户编程提供方便
按次数下载不扣除下载券;
注册用户24小时内重复下载只扣除一次;
顺序:VIP每日次数-->可用次数-->下载券;
- 《C++语言基础教程》课程电子教案(PPT教学课件)第7章 继承性和派生类.ppt
- 湖南工程学院:《中文版AutoCAD 2004基础教程》课程教学资源(PPT课件讲稿)第一章 绘图基础知识(刘军安).ppt
- 湖南工程学院:《中文版AutoCAD 2004基础教程》课程教学资源(PPT课件讲稿)第五章 线型、颜色及图层.ppt
- 湖南工程学院:《中文版AutoCAD 2004基础教程》课程教学资源(PPT课件讲稿)第八章 标注文字.ppt
- 湖南工程学院:《中文版AutoCAD 2004基础教程》课程教学资源(PPT课件讲稿)第十章 使用块、外部参照和设计中心.ppt
- 湖南工程学院:《中文版AutoCAD 2004基础教程》课程教学资源(PPT课件讲稿)第十一章 绘制基本三维对象.ppt
- 湖南工程学院:《中文版AutoCAD 2004基础教程》课程教学资源(PPT课件讲稿)第三章 编辑图形对象.ppt
- 湖南工程学院:《中文版AutoCAD 2004基础教程》课程教学资源(PPT课件讲稿)第七章 控制图形显示.ppt
- 湖南工程学院:《中文版AutoCAD 2004基础教程》课程教学资源(PPT课件讲稿)第六章 绘制面域与图案填充.ppt
- 湖南工程学院:《中文版AutoCAD 2004基础教程》课程教学资源(PPT课件讲稿)第九章 标注图形尺寸.ppt
- 湖南工程学院:《中文版AutoCAD 2004基础教程》课程教学资源(PPT课件讲稿)第二章 绘制二维图形对象.ppt
- 湖南工程学院:《中文版AutoCAD 2004基础教程》课程教学资源(PPT课件讲稿)第四章 使用绘图辅助工具.ppt
- 华为技术有限公司:胶片制作图标库.ppt
- 《Visual Basic 6.0》课程PPT教学课件(讲稿)第8章 多媒体.ppt
- 《Visual Basic 6.0》课程PPT教学课件(讲稿)第9章 数据库.ppt
- 《Visual Basic 6.0》课程PPT教学课件(讲稿)第2章 Visual Basic 6[1].0编程基础.ppt
- 《Visual Basic 6.0》课程PPT教学课件(讲稿)第5章 数组、自定义数据类型和过程.ppt
- 《Visual Basic 6.0》课程PPT教学课件(讲稿)第4章 基本算法和结构化程序设计.ppt
- 《Visual Basic 6.0》课程PPT教学课件(讲稿)第3章 窗体和常用控件.ppt
- 《Visual Basic 6.0》课程PPT教学课件(讲稿)第6章 内部控件.ppt
- 《C++语言基础教程》课程电子教案(PPT教学课件)第9章 C++的I/O流类库.ppt
- 《C++语言基础教程》课程电子教案(PPT教学课件)第1章 C++语言概述.ppt
- 《C++语言基础教程》课程电子教案(PPT教学课件)第2章 数据类型和表达式.ppt
- 《C++语言基础教程》课程电子教案(PPT教学课件)第3章 语句.ppt
- 《C++语言基础教程》课程电子教案(PPT教学课件)第4章 函数和作用域.ppt
- 《C++语言基础教程》课程电子教案(PPT教学课件)第5章 类和对象(一).ppt
- 《C++语言基础教程》课程电子教案(PPT教学课件)第6章 类和对象(二).ppt
- 《软件工程》课程学习资料:软件工程思想(林锐).pdf
- 中国矿业大学:《密码学》课程教学资源(PPT讲稿)认证协议(Authentication Protocol)Introduction(主讲:曹天杰).ppt
- 中国矿业大学:《密码学》课程教学资源(PPT讲稿)认证协议(Authentication Protocol)Block ciphers-AES.ppt
- 中国矿业大学:《密码学》课程教学资源(PPT讲稿)认证协议(Authentication Protocol)Block ciphers-DES.ppt
- 中国矿业大学:《密码学》课程教学资源(PPT讲稿)认证协议(Authentication Protocol)Block ciphers-L&D.ppt
- 中国矿业大学:《密码学》课程教学资源(PPT讲稿)认证协议(Authentication Protocol)CRYPTO12.ppt
- 中国矿业大学:《密码学》课程教学资源(PPT讲稿)认证协议(Authentication Protocol)Digital Signature.ppt
- 中国矿业大学:《密码学》课程教学资源(PPT讲稿)认证协议(Authentication Protocol)HashFunctions.ppt
- 中国矿业大学:《密码学》课程教学资源(PPT讲稿)认证协议(Authentication Protocol)Lecture 3 Number Theory Basics I.ppt
- 中国矿业大学:《密码学》课程教学资源(PPT讲稿)认证协议(Authentication Protocol)NTHEORY 2 Group Theory and Number.ppt
- 中国矿业大学:《密码学》课程教学资源(PPT讲稿)认证协议(Authentication Protocol)Attacks, Services, and Mechanisms.ppt
- 中国矿业大学:《密码学》课程教学资源(PPT讲稿)认证协议(Authentication Protocol)overview.ppt
- 中国矿业大学:《密码学》课程教学资源(PPT讲稿)认证协议(Authentication Protocol)Public Key Cryptography1.ppt