码迷,mamicode.com
首页 > 其他好文 > 详细

polymorphism-多态(函数多态、宏多态、静态多态、动态多态)

时间:2014-09-03 18:26:27      阅读:229      评论:0      收藏:0      [点我收藏+]

标签:polymorphism-多态(函数多态、宏多态、静态多态、动态多态)

多态(polymorphism

字面上意思--多种形态,即同一种方法的行为随上下文而异。

维基百科:Polymorphism (computer science), the ability incomputer programming to present the same interface for differing underlyingforms (data types).

 

1函数多态function polymorphism:也即是函数重载(functionoverloading


bubuko.com,布布扣

编译器根据参数列表的不同分别编译,生成不同的函数。即对于同一个函数名,编译器根据不同的参数列表可以生成不同的函数。


2宏多态macro polymorphism:

bubuko.com,布布扣

编译时,表达式ADD(i1,i2)ADD(s1,s2)替换成具体表达式。宏多态其实是实现简单的静态多态程序编译时,宏会被替换成具体的表达式,根据形参来标示具体操作


3静态多态

静态多态本质上就是模板的具现化。编译器处理后,会得到run_vehicle()两个不同的函数。

bubuko.com,布布扣

设计思想 对于相关的对象类型,直接实现它们各自的定义,不需要基类。只是规定各个具体类的实现中相同功能的接口名要相同。静态多态本质上就是模板的具现化,主要通过模板来实现又称编译时多态


4动态多态:基于继承机制和虚函数

bubuko.com,布布扣

设计思想:对于相关的对象类型,确定它们之间的一个共同功能集,然后在基类中,把这些共同的功能声明为多个公共的虚函数接口。各个子类重写这些虚函数,以完成具体的功能。动态多态基于继承机制和虚函数又称运行时多态


虚函数实现原理框图:

bubuko.com,布布扣

重点:虚函数

静态联编(staticbinding):在编译过程中进行联编;

动态联编(dynamic binding):有虚函数,编译器生成能够在程序运行时选择正确的虚方法的代码。

 

静态和动态的比较:

不同点

1、本质不同,静态多态在编译期决定,由模板具现完成,而动态多态在运行期决定,由继承、虚函数实现;

2、动态多态中接口是显式的,以函数签名为中心,多态通过虚函数在运行期实现,静态多台中接口是隐式的,以有效表达式为中心,静态多态通过模板具现在编译期完成。

相同点

1、都能够实现多态性,静态多态--编译期多态、动态多态--运行期多态;

2、都能够使接口和实现相分离,一个是模板定义接口,类型参数定义实现,一个是基类虚函数定义接口,继承类负责实现。

 

 

 


polymorphism-多态(函数多态、宏多态、静态多态、动态多态)

标签:polymorphism-多态(函数多态、宏多态、静态多态、动态多态)

原文地址:http://9320314.blog.51cto.com/9310314/1548340

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!