多态性是面向对象程序设计语言的又一重要特性,是指不同对象接收到同一消息时会产生不同的行为。继承处理的是类与类之间的层次关系,多态则是处理类的层次结构之间以及同一个类内部同名函数的关系。简单说,多态就是在同一个类或继承体系结构的基类与派生类中,用同名函数来实现不同的功能。
1、静态绑定和动态绑定
多态(Polymorphism)就是指不同对象收到相同消息时会执行不同的操作。也就是用一个相同名称定义许多不同的函数,这些函数可以针对不同数据类型实现相同或相似的功能,即所谓的一个接口,多种实现。
多态性与联编密切相关。一个源程序需要经过编译、连接才能形成可执行文件,在这个过程中要把调用函数名与对应函数关联在一起,这个过程就是绑定(binding),又称为联编。
绑定分为静态绑定和动态绑定。
静态绑定:即静态联编,指在编译程序时根据调用函数提供的信息,把它所对应的具体函数确定下来,即在编译时就把调用函数名与具体函数绑定在一起。
动态绑定:即动态联编,指编译时还不能确定函数调用所对应的具体函数,只有在程序运行过程中才能够确定函数调用所对应的具体函数。
C++中这两种都可以实现多态性,静态多态性是通过函数重载和运算符重载在编译时通过静态绑定实现的;动态多态性是通过继承和虚函数在程序执行时通过动态绑定实现的。
平常所说的面向对象程序设计的多态性常指运行时的多态性。
静态多态性执行速度快;动态多态性在执行时需要从多个同名函数中匹配调用函数,所以比静态多态性的执行效率低,但提供了更多的灵活性、问题的抽象性和程序的可维护性。