所谓多态性是指发出同样的消息被不同类型的对象接收时导致完全不同的行为。这里所说的消息主要是指对类的成员函数的调用,而不同的行为是指不同的实现。利用多态性,用户只需发送一般形式的消息,而将所有的实现留给接收消息的对象。对象根据所接收到的消息而做出相应的动作(即操作)。
所谓函数重载简单地说就是赋给同一个函数名多个含义。具体地讲,C++中允许在相同的作用域内以相同的名字定义几个不同实现的函数,可以是成员函数,也可以是非成员函数。但是,定义这种重载函数时要求函数的参数或者至少有一个类型不同,或者个数不同。而对于返回值的类型没有要求,可以相同,也可以不同。那种参数个数和类型都相同,仅仅返回值不同的重载函数是非法的。因为编译程序在选择相同名字的重载函数时仅考虑函数表,这就是说要靠函数的参数表中,参数个数或参数类型的差异进行选择。
C++支持两种多态性:编译时多态性(静态多态性),运行时多态性(动态多态性)。
多态实现的手段:
函数重载(静态多态性)
运算符重载(静态多态性)
类模板(静态多态性)
虚函数(动态多态性)
在编译时即可确定其调用的函数,其过程称为静态关联(static binding),由于是在运行前进行关联的,故又称为早期关联(early binding)。
在运行阶段把虚函数和类对象“绑定”在一起的,此过程称为动态关联(dynamic binding)。这种多态性是动态的多态性,即运行阶段的多态性。由于动态关联是在编译以后的运行阶段进行的,因此也称为滞后关联(late binding)。