1. 定义
消息在C++编程中指的是对类的成员函数的调用。
多态是指相同的消息被不同类型的对象接收会引起不同的操作。
通俗的说是在不同情况下调用同名函数时,实际上调用的并不是同一个函数。
2. 多态的类型
分为:重载多态,强制多态,参数多态和包含多态。
前两种称为专用多态。
1)普通函数的重载和类的成员函数的重载,都属于重载多态。
2)当一个函数的形参是两个int型的数据,但是实际传参的时候有一个是double类型的,需要将double类型的强制转化为int型。
就是强制多态,强制多态就是将变量的类型进行转换来满足函数运算的要求。
后两种称为通用多态。
1)类模板将类型参数化,设定了确定的类型才能实例化。
由类模板实例化得到的所有类都有相同的操作,但是被操作对象的类型不同,这就是参数多态。
2)包含多态是指类族中不同类的同名成员函数实现的操作不相同。(父类和子类之间,基类和派生类)
包含多态一般通过虚函数来实现。
3. 绑定
从实现阶段的不同,可以将多态分为编译时的多态和运行时的多态。
1)编译时的多态是指在编译的过程中就确定了具体调用同名函数中的哪个函数;
2)运行时的多态是指在程序运行的过程中才动态的确定调用哪个同名函数。
这种确定调用哪个同名函数的过程就叫做联编或者绑定。
绑定实际上就是确定某个标识符对应的存储地址的过程。
按照绑定发生的阶段的不同可以分为:静态绑定和动态绑定。
1)静态绑定对应着编译时的多态,即绑定过程发生在编译链接阶段。
在编译链接的过程中,编译器根据类型匹配等特征确定某个同名标识究竟调用哪一段程序代码,也就是确定通过某个同名函数到底调用哪个函数体。
上面4种类型的多态有三种需要静态绑定:重载多态,强制多态和参数多态。
2)动态绑定对应运行时的多态,即绑定过程发生在程序运行阶段,在编译阶段无法确定调用的具体函数,就要等到程序运行时动态确定。
包含多态就需要使用动态绑定实现。