目录
多态概念
完成某个行为,不同的对象去完成时会产生出不同的状态,称为多态。例如抢红包场景,不同的用户抢到金额大小不一样的红包
多态是在不同继承关系的类对象,去调用同一函数,产生了不同的行为。
继承中要构成多态的条件(两个条件必须同时满足)
1. 派生类必须对基类的虚函数进行重写
(重写的条件是:被调用的函数必须是虚函数、还有函数名,返回值,参数必须相同才能构成虚函数,不符合重写就是隐藏关系,既不构成多态)
重载:两个函数在同一作用域、参数/函数名相同
重写(覆盖):两个函数分别在基类和派生类的作用域、参数/函数名/返回值必须相同、必须是虚函数
重定义(隐藏):函数名相同、两个函数分别在基类和派生类的作用域、不是重写就是重定义
2. 必须通过基类的指针或者引用调用虚函数
- 不同人买票不同价格:
- class Person
- {
- public:
- virtual void BuyTicket()
- {
- cout << "全价" << endl;
- }
- };
-
- class Student :public Person
- {
- public:
- virtual void BuyTicket()//虚函数+三同,就是虚函数的重写/覆盖条件
- {
- cout << "半价" << endl;
- }
- };
-
- class Soldier :public Person
- {
- public:
- virtual void BuyTicket()
- {
- cout << "免费" << endl;
- }
- };
-
- void fun(Person& p)//必须通过基类的指针或者引用调用虚函数