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