文档介绍:《C++面向对象程序设计》教学内容
第1章 C++概述
第2章类和对象
第3章面向对象程序设计概述
第4章进一步学习类和对象
第5章堆与复制构造函数
第6章继承性:派生类
第7章运算符重载
第8章虚函数和多态性
第9章模板
第10章类库和C++的标准模板库STL
第11章输入输出流
第12章异常处理
第8章 多态性与虚函数
多态性概述
静态联编和动态联编
虚函数
纯虚函数和抽象类
应用举例
面向对象程序设计的特征
抽象性(Abstraction)
封装性(Encapsulation)
继承性(Inheritance)
多态性(Polymorphism)
多态性概述
polymorphism,“many forms”:即多种形态
在自然语言中,多态性即是“一词多义”;
更准确地说,多态性是指相同的动词作用到不同类型的对象上,
例如:
驾驶摩托车
驾驶汽车
驾驶飞机
驾驶轮船
驾驶宇宙飞船
什么是多态性?(OOP)
当不同对象接受到相同的消息产生不同的动作,这种性质称为多态性。
通俗地说,多态性是指用一个名字定义不同的函数,这些函数执行不同但又类似的操作,
即用同样的接口访问功能不同的函数,从而实现“一个接口,多种方法”。
多态性的例子
在C语言中,由于不支持多态,求绝对值的动作要求三个不同的函数名字:
abs(), labs(),fabs()
分别用来求整数,长整数、浮点数的绝对值。
在C++语言中,由于支持多态,求绝对值的动作可以只用一个函数名:
abs()
面向对象程序设计的精华
通过一个简单的接口对不同的实现进行概念上的简化。
class walkman{
virtual void on( )=0;
virtual void off( )=0;
virtual void play( )=0;
virtual void record( )=0;
virtual void stop( )=0;
};
Cassette player, CD player, MD player, MP3 player;
提供给用户相同的接口
应用多态性的好处
多态应用于OOP的目的是允许用一个名字来指定动作的一般类(即逻辑上相似的动作)。
从而带来以下的好处:
提高了处理问题的抽象级别;
降低了程序设计时的复杂性;
(程序员只需记住一个接口,而不是好几个。)
C++实现的多态性
编译时多态性:
函数重载
运算符重载
模板
运行时多态性:
借助虚函数来获得
在C++中,多态性的实现与联编(Binding)这一概念有关。
静态联编和动态联编
什么叫联编(Binding)?
一个源程序需要经过编译、连接,才能成为可执行代码。
上述过程中需要将一个函数调用链接上相应的函数代码,这一过程称为联编。
联编的目的是要建立函数调用与函数体之间的联系,
即将一个函数调用连接到一函数的入口地址。