C++中的多态性

多态性是指当不同的对象收到相同的消息时产生不同的动作。

多态性使软件中的对象行为更加符合软件所模拟的客观世界中对象的行为多样性,为软件设计中的功能实现和任务调度提供了灵活性。

C++ 支持两种多态性:编译时多态性和运行时多态性。

                                  

编译时的多态性:通过函数重载或运算符重载实现。重载的函数根据调用时给出的实参类型或个数,在程序编译时就可确定调用哪个函数。

只使用编译时多态性机制的程序设计只能称为基于对象(Object Based)的程序设计,使用了运行时多态性机制,才能称为是面向对象(Object Oriented)的程序设计。

编译多态性的局限性:由于编译多态性是通过函数重载实现的,因此对象行为的确定(函数的运行绑定)只能由编译器根据程序源代码的安排在编译过程中实现。这样实现的对象行为多样性虽然具有良好的可读性,但在控制程序运行和对象行为多样性方面存在着局限性:

对象行为的多样性必须是预先确定可知的,程序运行的控制必须是预先规划固定的,因此只能解决软件所模拟的客观世界中那些可以预先确定和控制的事件的实现。

 调用重载函数的不同版本(确定对象行为的多样性)是依据参数(个数和类型)的差别实现的(派生类对基类同名、同参数成员函数的覆盖除外),即发送给不同对象的消息并不完全一致。从这一点分析,编译多态性所实现的并非完备意义上的多态性,即不同对象接收到同一消息(消息名和参数完全一致),表现出不同的行为。

 

运行时的多态性:在程序执行前,根据函数名和参数无法确定应该调用哪个函数,必须在程序的执行过程中,根据具体的执行情况来动态确定。它通过类的继承关系和虚函数来实现,主要用来建立实用的类层次体系结构、设计通用程序。

运行时多态性:又称为动态多态性,即确定消息的多态响应的联编操作不是在编译链接过程完成的,而是在程序运行中才能完成。这种联编称为动态联编或后期联编。

实现的途径是:继承和虚函数。

posted on 2013-11-16 16:36  娟娟细流  阅读(1244)  评论(0编辑  收藏  举报

导航