C++_多态性
多态性
多态性概述
所谓多态性就是不同对象收到相同的消息时,产生不同的动作。
多态性的两种描述:
- (1)指具有不同功能的函数可以用同一个函数名。
- (2)指向不同的对象发送同一个消息,不同的对象在接收时会产生不同的行为。
从实现角度看,分为静态多态性和动态多态性
- 静态多态性——函数重载和运算符重载
- 运行时的多态——继承和虚函数
多态的实现:
- 函数重载
- 运算符重载
- 虚函数
多态的分类
C++中的多态性可以分为四类:
-
通用多态
- 参数多态
- 包含多态
-
专用多态
- 重载多态
- 强制多态
-
参数多态与类属函数和类属类相关联,函数模板和类模板就是这种多态。
-
包含多态是研究类族中定义于不同类中的同名成员函数的多态行为,主要是通过虚函数来实现的。
-
重载多态如函数重载、运算符重载等。普通函数及类的成员函数的重载多属于重载多态。
-
强制多态是指将一个变元的类型加以变化,以符合一个函数或操作的要求,例如加法运算符在进行浮点数与整型数相加时,首先进行类型强制转换,把整型数变为浮点数再相加的情况,就是强制多态的实例。
多态的实现
在C++中,多态的实现和联编这一概念有关。
所谓联编就是把函数名与函数体的程序代码连接(联系)在一起的过程。
- 静态联编就是在编译阶段完成的联编。
- 动态联编是运行阶段完成的联编。
多态从实现的角度来讲可以划分为两类:
- 编译时的多态:编译时的多态是通过静态联编来实现的。
- 静态联编时,系统用实参和形参进行匹配,对于同名的重载函数便根据参数上的差异进行区分,然后进行联编。从而实现了多态性。
- 运行时的多态:运行时的多态是用动态联编实现的。
- 当程序调用到某一函数名时,才去寻找和连接其程序代码,对面向对象的程序设计而言,就是当对象接收到某一消息时,才去寻找和连接相应的方法
一般而言, 编译型语言都采用静态联编,而解释性语言都采用动态联编。
纯粹的面向对象程序设计语言由于其执行机制是消息传递,所以只能采用动态联编。这就给基于C语言的 C++ 带来了麻烦。因为为了保持C语言的高效性,C++仍是编译型的,仍采用静态联编。好在 C++ 的设计者想出了“虚函数” 的机制,解决了这个问题。利用虚函数机制,C++ 可部分地采用动态联编。这就是说,C++ 实际上是采用了静态联编和动态联编相结合的联编方法。
在C++中, 编译时多态性主要是通过函数重载和运算符重载实现的。 运行时多态性主要是通过虚函数来实现的。

浙公网安备 33010602011771号