🪐🪐🪐欢迎来到程序员餐厅💫💫💫
主厨:邪王真眼
主厨的主页:Chef‘s blog
所属专栏:c++大冒险
总有光环在陨落,总有新星在闪烁
【本节目标】
1. 多态的概念
2. 多态的定义及实现
3. 抽象类
4. 多态的原理
5. 单继承和多继承关系中的虚函数表
1. 多态的概念
1.1 概念
通俗来说,就是多种形态,
具体点就是去完成某个行为,当不同的对象去完成时会
产生出不同的状态
举个栗子:
比如
买票这个行为
,当
普通人
买票时,是全价买票;
学生
买票时,是半价买票;
军人
买票时是优先买票。
2. 多态的定义及实现
2.1多态的构成条件
- 1. 必须通过基类 的指针或者引用调用虚函数
- 2. 被调用的函数必须是虚函数,且派生类必须对基类的虚函数进行重写
2.2 虚函数
虚函数:即被
virtual
修饰的类成员函数称为虚函数
class Person {
public:
virtual void BuyTicket() { cout << "买票-全价" << endl;}
};
2.3虚函数的重写
虚函数的重写
(
覆盖
)
:
派生类中有一个跟基类完全相同的虚函数
(
即
派生类虚函数与基类虚函数的返回值类型、函数名字、参数列表完全相同
)
,称子类的虚函数重写了基类的虚函数。
class Person {
public:
virtual void BuyTicket() { cout << "买票-全价" << endl; }
};
class Student : public Person {
public:
virtual void BuyTicket() { cout << "买票-半价" << endl; }
/*void BuyTicket() { cout << "买票-半价" << endl; }*/
};
void Func(Person& p)
{ p.BuyTicket(); }
int main()
{
Person ps;
Student st;
Func(ps);
Func(st);
return 0;
}
2.4虚函数重写的例外
1. 协变(基类与派生类虚函数返回值类型不同)
派生类重写基类虚函数时,基类虚函数返回
基类对象的指针或者引用
,派生类虚函数返回
派生类对象的指针或者引用