当前课程知识点:C++语言程序设计进阶 > 第八章 多态性 > 导学 > 导学
大家好
欢迎继续学习C++
语言程序设计
这一章我们来学习多态性
那么多态性呢
实际上是一个
挺生僻的一个术语
是
所以同学们是确实觉得很好奇
那么多态性是个什么
到底什么是多态性呢
是啊
在日常生活中
我们很少用到多态这个词
在计算机编程领域呢
多态
顾名思义就是操作接口
具有表现多种不同形态的能力
在不同的环境下
对不同的对象
具有不同的处理方式
很奇妙是吧
那多态到底是怎么实现的呢
多态呢
实际上是通过绑定来实现的
所谓绑定呢
就是将一个标志符名称
与一段函数代码结合起来
比如说
我们的函数调用表达式
跟函数体结合
这就是一种绑定
绑定呢
按照它的实现的时机呢
分成编译时的绑定
和运行时的绑定
编译时的绑定呢
也叫早绑定
那么也就是在编译阶段
编译器就把这个绑定完成了
那么运行时的绑定呢
是等到运行的时候
才将这个标志符
和相应的函数代码结合起来
那么叫运行时的绑定
或者叫晚绑定
那在C++中呢
实际上我们学过的函数重载
实际上也是一种多态性
它是静态多态性的一种体现
也就是函数重载
是通过早绑定
或者是编译时的绑定来完成的
其实呢
运算符重载也是一种多态性
我们知道
这个系统预定义好的这些运算符
它都可以适用于不同的数据类型
比如说加法可以作整数的加法
可以作浮点数的加法
那么实际上就是说
已经将这个运算符
为不同的数据类型
做过重载了
那么同学们呢就特别关心
我们自定义的类型
能不能也用这些系统
预定义好的加减乘除运算符呢
比如说我们要定义一个复数
能不能用它去做加法呢
那么这个是同学们
特别关心的问题
也是挺有意思的一个问题
等大家学完了这一章
就会说当然可以了
和函数重载的原理是一样的
我们可以通过定义
操作符函数
来为自己定义的类
来重载运算符
在这一章里头
大家将会看到
自己定义的复数类
能够通过+和-
来进行加减运算
在这一章里
我们还能看到
大家非常熟悉的clock类
可以通过前置和后置++
来实现自增1秒
更神奇的是
在这一章我们还将看到
通过cout和插入运算符
能够把自定义的整个类的对象
都输出出来
这一切都是通过重载
运算符来实现的
同学们其实还问过我一个问题
就是在第七章里
大家没能实现成功的那个
通用的显示函数
大家一直觉得非常的奇怪
为什么呢
怎么办呢
为什么通过基类的指针
明明已经指向了派生类的对象
可是在执行的过程中
却不能够自动找到
派生类中对应的函数呢
那么确实这是一个悬念
这一章我们要给大家来
揭开这个悬念
那么我们如何能够让程序
在运行过程中
通过这个指针所指向的实际对象
去找到这个对象的功能函数呢
实际上呢
这个就要用到
C++的动态绑定
也就是运行时的绑定
说起多态性 绑定
大家可能觉得这些术语挺悬的
其实特别简单
只要加一个
virtual关键字就可以了
后面呢
大家会看到我们怎么去改编
第七章那个没成功的例题
就加一个virtual关键字
就这么简单
好 那么这一章呢
将由我给大家介绍
多态性的基本概念和语法
以及验证性的例题
由李超老师
为大家带来实验指导
还有有趣的综合实例
在本章的实验中呢
我们将会看到
我们熟悉的point类
能够通过++和--
来实现位置的移动
我们还会看到
我们用基类 车类的指针
来指向自行车 摩托车
还有小汽车
来实现不同的开开和停停
在我们的综合实例中
大家很关心的
那个银行的银行帐户的例子
我们就会觉得有些地方
代码很重复
有些罗嗦
那么在这一章里
郑老师给大家讲的virtual
这样一个利器将会帮到我们
我们将会virtual
来实现统一的用基类
来对不同的帐号和操作
进行灵活地处理
并且我们还会对日期这个类
进行减法运算符的重载
使得我们的代码编写
更加地简洁 更加地直观
好 听了我们的介绍呢
希望大家能有兴趣
跟我们一起来探索
多态性的奥秘
大家一定要多多动手实践
-导学
--导学
-继承的基本概念和语法
-第七章 继承与派生--继承的基本概念和语法习题
-继承方式
-第七章 继承与派生--继承方式
-基类与派生类类型转换
-第七章 继承与派生--基类与派生类类型转换
-派生类的构造和析构
--派生类的构造函数
--派生类的析构函数
--第七章 继承与派生--派生类的构造和析构
-派生类成员的标识与访问
--虚基类
-第七章 继承与派生--派生类成员的标识与访问
-小结
--小结
-综合实例
--第七章综合实例
-实验七
--实验七
-导学
--导学
-第八章 多态性--导学
-运算符重载
--运算符重载的规则
-第八章 多态性--运算符重载
-虚函数
--虚函数
--虚析构函数
--虚表与动态绑定
-第八章 多态性--虚函数
-抽象类
--抽象类
--第八章 多态性--抽象类
-override与final
-第八章 多态性--override与final
-小结
--第八章小结
-综合实例
--第八章综合实例
-实验八
--实验八
- 第八章讲义
-导学
--导学
-模板
--函数模板
--类模板
-第九章 模板与群体数据--模板
-线性群体
--线性群体的概念
-第九章 模板与群体数据--线性群体
-数组
--数组类模板
-链表
--链表类模板
-第九章 模板与群体数据--链表
-栈
--栈类模板
--栈类模板课后习题
--例9-9 栈的应用课后习题
-队列
--队列类模板
-第九章 模板与群体数据--队列
-排序
--排序概述
--插入排序
--选择排序
--交换排序
-第九章 模板与群体数据--排序
-查找
--查找
--查找课后习题
-小结
--小结
-综合实例
--综合实例
-实验九
--实验九
- 第九章讲义
-导学
--导学
-泛型程序设计及STL的结构
--STL简介
-第十章 泛型程序设计与C++标准模板库--泛型程序设计及STL的结构
-迭代器
--迭代器
-第十章 泛型程序设计与C++标准模板库--迭代器
-容器的基本功能与分类
-第十章 泛型程序设计与C++标准模板库--容器的基本功能与分类
-顺序容器
--顺序容器的特征
--第十章 泛型程序设计与C++标准模板库--顺序容器
-关联容器
--集合
--映射
-第十章 泛型程序设计与C++标准模板库--关联容器
-函数对象
--函数对象
--函数适配器
-算法
--算法
-小结
--第十章小结
-综合实例
--综合实例
-实验十
--实验十
- 第十章讲义
-导学
--导学
-I/O流的概念及流类库结构
-第十一章 流类库与输入/输出--I/O流的概念及流类库结构
-输出流
--输出流概述
--向文本文件输出
--向二进制文件输出
--向字符串输出
-第十一章 流类库与输入/输出--输出流
-输入流
--输入流概述
--输入流应用举例
--从字符串输入
-第十一章 流类库与输入/输出--输入流
-输入/输出流
--输入/输出流
-第十一章 流类库与输入/输出--输入/输出流
-小结
--小结
-综合实例
--综合实例
-实验十一
--实验十一
- 第十一章讲义
-导学
--第12章导学
-异常处理的思想与程序实现
-第十二章 异常处理--异常处理的思想与程序实现
-异常处理中的构造与析构
-第十二章 异常处理--异常处理中的构造与析构
-标准程序库异常处理
-第十二章 异常处理--标准程序库异常处理
-小结
--第12章小结
-综合实例
--综合实例
-实验十二
--实验十二
- 第十二章讲义