•理解多态•
在面向对象技术中,对象在收到信息后要予以响应,不同的对象收到同一消息可产生完全不同的结果,这一现象称为多态。在使用多态技术时,用户可以发送一个通用的消息,而实现的细节则由接收对象自行决定,这样同一消息就可以调用不同的方法。
多态有多种不同的形式,其中参数多态和包含多态称为通用多态,过载多态和强制多态称为特定多态。
参数多态是应用比较广泛的,被称为最纯的多态。这是因为同一对象、函数或过程能以一致的形式用于不同的类型。包含多态最常用的例子就是子类型化,即一个类型是另一个类型的子类型。
过载多态是同一变量被用来表示不同的功能而通过上下文以决定一个名所代表的功能。这纯粹是一种通过语法对不同语义的对象使用相同的名,编译能够消除这一模糊。强制多态是通过语义操作把一个变元的类型加以变换,以符合一个函数的要求,如果不做这一强制性变换将出现类型错误。类型的变换可在编译时完成,通常是隐式进行,当然也可以在动态运行时来做。
多态,即允许将派生类的对象当作基类的对象使用。如果A是基类,B和C是A的派生类,多态函数Test的参数是A的指针。那么Test函数可以引用A、B、C的对象。
C++用关键字virtual来声明一个函数为虚函数,派生类的虚函数将覆盖(override)基类对应的虚函数的功能。
结合“抽象基类”和“多态”有如下突出优点:
(1)应用程序不必为每一个派生类编写功能调用,只需要对抽象基类进行处理即可。这一招叫“以不变应万变”,可以大大提高程序的可复用性(这是接口设计的复用,而不是代码实现的复用)。
(2)派生类的功能可以被基类指针引用,这叫向后兼容,可以提高程序的可扩充性和可维护性。以前写的程序可以被将来写的程序调用不足为奇,但是将来写的程序可以被以前写的程序调用那可了不起。