1.多态的类型
多态性有四种类型:重载多态、强制多态、参数多态和包含多态。
前两种可以统称为专用多态。之前讲过普通函数的重载和类的成员函数的重载,它们都属于重载多态。上面说的整型变量和浮点型变量相加时,需要先把整型变量强制转换为浮点型再进行加法运算,这就是强制多态。从概念上讲,强制多态就是将一个变量的类型进行转换,以满足一个函数运算的要求。
后两种统称为通用多态。前面讲过的类模板将类型参数化,设定了确定的类型才可以实例化。由类模板实例化得到的所有类都有相同的操作,但是被操作对象的类型不同,这就是参数多态。包含多态是指类族中不同类的同名成员函数实现的操作不相同。包含多态一般通过虚函数来实现。虚函数在我们进行软件开发设计时会经常用到,初学者在有了一定经验后会越来越多的使用虚函数。
后面会主要讲重载多态的运算符重载和包含多态的虚函数。
2.多态的实现
从多态实现的阶段不同来分类可以分为编译时的多态和运行时的多态。
编译时的多态是指在编译的过程中就确定了具体调用同名函数中的哪个函数,而运行时的多态则是在程序运行过程中才动态的确定调用的具体函数。这种确定调用同名函数的哪个函数的过程就叫做联编或者绑定。一般称其为绑定。绑定实际上就是确定某个标识符对应的存储地址的过程。按照绑定发生的阶段的不同可以分为:静态绑定和动态绑定。静态绑定就对应着编译时的多态,动态绑定对应运行时的多态。
如果绑定过程发生在编译链接阶段,则称为静态绑定。在编译链接过程中,编译器根据类型匹配等特征确定某个同名标识究竟调用哪一段程序代码,也就是确定通过某个同名函数到底调用哪个函数体。1中的四种多态中有三种需要静态绑定:重载多态、强制多态和参数多态。
而如果绑定过程发生在程序运行阶段,则成为动态绑定。在编译链接过程中无法确定调用的具体函数,就要等到程序运行时动态确定。包含多态就需要使用动态绑定实现。
标签:编译,函数,哪些,绑定,多态,重载,类型
From: https://www.cnblogs.com/chhblogs/p/18241143