一 概念
通过一个指向基类的指针调用虚成员函数的时候,运行时系统将能够根据指针所指向的实际对象调用恰当的成员函数实现,因此基类的指针具有多种形态。 一言以蔽之, "一个接口,多种方法",程序在运行时才决定调用的函数。
二 作用
封装可以使代码模块化,继承可以扩展已存在的代码,它们的作用是代码重用。而多态的目的是接口重用,也就是不论传过来的是哪个类的对象,函数都能通过同一个接口调用到适应各自对象的方法。
三 实现
1 声明基类的指针,利用该指针,指向任意一个子类的对象,调用相应的虚函数,可以根据指向的子类的不同而实现不同的方法。
2 指针转换
四 条件
1:基类的虚函数
2:派生类的虚函数必须和基类的虚函数声明一致(包括参数类型,返回值)
3:类的成员函数才可以说明成虚函数。静态成员函数不受制于某个对象,不能说明成虚函数。内联函数不能再运行中动态确定。构造函数负责构造对象,不能声明成虚函数。而析构函数一般都是虚函数。
4:指针或引用才能实现多态
五 术语
1 纯虚函数
纯虚函数是在基类中声明的虚函数,它在基类中没有定义,但要求任何派生类都要定义自己的实现方法。在基类中实现纯虚函数的方法是在函数原型后加“=0”
virtual void funtion()=0
2、虚函数
虚函数是在基类中被声明为virtual,并在派生类中重新定义的成员函数,可实现成员函数的动态覆盖(Override)
3、抽象类
包含纯虚函数的类称为抽象类。由于抽象类包含了没有定义的纯虚函数,所以不能定义抽象类的对象。