多态,就是一个事物,通过多种方式呈现,一对多机制
一 、多态存在条件:
1-必须存在继承关系
2-必须存在同名虚函数,虚函数覆盖(函数原型相同)
3-必须存在基类指针,调用派生类成员函数
二、虚函数构成多态关键
虚函数关键字:virtual
虚函数是构成多态存在的关键,也是虚函数唯一的作用
1-只需要在基类成员函数前面加上virtual关键字即可
2-构造函数不存在虚函数,不继承,派生类通过调用调用基类构造函数
3-析构函数有虚函数(只需要在基类中定义虚函数,后者不管是否同名,都可以)
三、纯虚函数
在虚函数后声明后面加上=0即可
1-纯虚函数没有实例,不能够进行实例化,因为无函数体
2-派生类可以通过重写基类虚函数,从而实现实例化
实例:
#include<iostream>
using namespace std;
class Base//基类
{
public:
virtual void show()//如果声明为virtual void shwo()=0;则为纯虚函数,无函数体,无实例
{
cout<<"基类虚函数"<<endl;
}
};
class P:public Base//派生类
{
public:
void show()
{
cout<<"派生虚函数"<<endl;
}
};
int main()
{
Base *p=new Base;//必须存在的基类指针,虚函数以指向的对象类型来判断调用哪个类
p->show();
p=new P;
p->show();
}
输出结果:
基类虚函数
派生虚函数
隐藏:子类重写父类的普通函数,调用时,子类调用子类,父类调用父类
覆盖:子类重写父类的虚函数 ,调用时,父类指针/引用都是子类函数