|
在C++语言中,所谓多态性,即对同一条信息,不同对象将产生不同的相应操作。简言之,以多种形式在多个对象上进行操作(但接口相同)。多态性一般通过对象的继承关系来实现。
|
|
|
在讲多态性实现之前,首先讨论一下成员函数重载和虚函数的概念。
|
|
|
成员函数的重载是指在派生类中定义和其祖先类中相同的函数,即函数名、参数个数、参数类型都相同。虽然函数的重载一定程度上满足了多态性,但是函数重载实现多态性的前提是知道接收消息的具体对象。这不能满足在现实世界中,消息发送者在发送消息之前,并不需要知道具体接收者的要求。函数的重载只是静态地满足了多态性的要求。重载的子程序是一种特别的多态。
|
|
|
虚函数是在类的成员函数定义前面加上关键字virtual。虚函数仅给出方法的定义而不给出方法体。含有虚函数的类叫作抽象类。抽象类具有如下特性:①由于抽象方法没有体,因此抽象类不能实例化;②抽象类的子类必须给出所继承的抽象方法的体。
|
|
|
在C++语言中,多态是通过虚函数来实现的。如果一个基类的成员函数定义为虚函数,那么,它在所有派生类中也保持为虚函数,派生类中可以省略virtual关键字。要达到多态的效果,基类和派生类的对应函数不仅名字相同,而且返回类型、参数个数和类型也必须相同。在C++语言中,不允许用抽象类创造对象,它只能被其他类继承。要定义抽象类,就必须定义纯虚函数,它实际上是起到接口的作用。对虚函数的限制是:只有类的成员函数才可以是虚函数;静态成员函数不能是虚函数;构造函数不能是虚函数;析构函数可以是虚函数,而且我们常常将析构函数定义为虚函数。
|
|
|
|
|
|
|
|
|
|