C++_多态性

多态性

多态性概述

所谓多态性就是不同对象收到相同的消息时,产生不同的动作。

多态性的两种描述:

  • (1)指具有不同功能的函数可以用同一个函数名。
  • (2)指向不同的对象发送同一个消息,不同的对象在接收时会产生不同的行为。

从实现角度看,分为静态多态性和动态多态性

  • 静态多态性——函数重载和运算符重载
  • 运行时的多态——继承和虚函数

多态的实现:

  • 函数重载
  • 运算符重载
  • 虚函数

多态的分类

C++中的多态性可以分为四类:

  • 通用多态

    • 参数多态
    • 包含多态
  • 专用多态

    • 重载多态
    • 强制多态
  • 参数多态与类属函数和类属类相关联,函数模板类模板就是这种多态。

  • 包含多态是研究类族中定义于不同类中的同名成员函数的多态行为,主要是通过虚函数来实现的。

  • 重载多态函数重载运算符重载等。普通函数及类的成员函数的重载多属于重载多态。

  • 强制多态是指将一个变元的类型加以变化,以符合一个函数或操作的要求,例如加法运算符在进行浮点数与整型数相加时,首先进行类型强制转换,把整型数变为浮点数再相加的情况,就是强制多态的实例。

多态的实现

在C++中,多态的实现和联编这一概念有关。

所谓联编就是把函数名与函数体的程序代码连接(联系)在一起的过程。

  • 静态联编就是在编译阶段完成的联编。
  • 动态联编是运行阶段完成的联编。

多态从实现的角度来讲可以划分为两类:

  • 编译时的多态:编译时的多态是通过静态联编来实现的。
    • 静态联编时,系统用实参和形参进行匹配,对于同名的重载函数便根据参数上的差异进行区分,然后进行联编。从而实现了多态性。
  • 运行时的多态:运行时的多态是用动态联编实现的。
    • 当程序调用到某一函数名时,才去寻找和连接其程序代码,对面向对象的程序设计而言,就是当对象接收到某一消息时,才去寻找和连接相应的方法

一般而言, 编译型语言都采用静态联编,而解释性语言都采用动态联编

纯粹的面向对象程序设计语言由于其执行机制是消息传递,所以只能采用动态联编。这就给基于C语言的 C++ 带来了麻烦。因为为了保持C语言的高效性,C++仍是编译型的,仍采用静态联编。好在 C++ 的设计者想出了“虚函数” 的机制,解决了这个问题。利用虚函数机制,C++ 可部分地采用动态联编。这就是说,C++ 实际上是采用了静态联编和动态联编相结合的联编方法。

在C++中, 编译时多态性主要是通过函数重载运算符重载实现的。 运行时多态性主要是通过虚函数来实现的。

posted @ 2020-02-28 12:51  鲸90830  阅读(365)  评论(0)    收藏  举报