目录
多态概念
什么是多态呢?
就是针对不同对象时对同一个方法接口产生不同的结果。就好像抢手气红包,不同人(对象)抢红包(方法接口)抢到的钱不同(不同的结果)。
多态的构成
多态的构成需要满足两个条件:
1. 必须通过基类的指针或者引用调用虚函数
2. 被调用的函数必须是虚函数,且派生类必须对基类的虚函数进行重写
class PersonA
{
public:
virtual void LuckmMoney()
{
cout<<"抢到1/3"<<endl;
}
};
class PersonB:public PersonA
{
public:
virtual void LuckmMoney()
{
cout<<"抢到2/3"<<endl;
}
};
void Func(PersonA& people)
{
People.LuckmMoney();
}
void Test()
{
personA zhangyi;
Func(zhangyi);
personB goucui;
Func(goucui);
}
而virtual修饰的类成员函数称为虚函数。
而多态的实现利用了虚函数的重写(覆盖),派生类中有一个跟基类完全相同的虚函数即构成重写。
我们还要记住两个关键字
1. final:修饰虚函数,表示该虚函数不能再被继承
2. override: 检查派生类虚函数是否重写了基类某个虚函数,如果没有重写编译报错。
抽象类
在虚函数后面加上=0,则这个函数是纯虚函数,包含纯虚函数的类是抽象类。
派生类继承后必须重写才能实例化对象,体现了接口继承。
多态的原理
类中有虚函数会有虚函数表存放虚函数的指针,类中会存放虚函数表指针。
多态的原理本质是虚函数的重写。