目录
前文
C++三大特性——封装,継承,多态,前两个我们都已经学习过了,现在让我们一起来学习最后一个特性——多态
一,什么是多态?
1.1 多态的概念
多态其实就是多种形态,实际上就是当完成某个行动时,不同的对象完成会产生不同的状况。如上图某景点门票,大学生,普通人,儿童所需要的票价都是不一样的,这就算是多态在实际生活的一种应用。
二, 多态的定义及实现
2.1 多态的构成条件
多态是在不同継承关系的类对象,去调用同一的函数,产生了不同的行为。如上面的Student继承了Person,Person对象买全价票,Student买半价票
但是我们需要主要构成多态要满足下面两个条件(后面会讲到两个特例)
1. 被调用的函数必须是虚函数,而且子类要对父类的虚函数进行重写
2. 必须通过父类的指针或者引用调用虚函数
#define _CRT_SECURE_NO_WARNINGS 1
#include <iostream>
using namespace std;
class Person
{
public:
virtual void Buyticket()
{
cout << "全价票" << endl;
}
};
class Student :public Person
{
public:
virtual void Buyticket()
{
cout << "半价票" << endl;
}
};
void Func1(Person& p)
{
p.Buyticket();
}
int main()
{
Person p;
Student s;
Func1(p);
Func1(s);
return 0;
}
以上面为例,我们先简单使用一下多态,上述代码具体实现如下。
看到这里可能有的老铁很好奇,这怎么这么神奇,加一个virtual就可以实现,底层是怎么实现的?我们不要急,