
1. 多态的概念
多态,通俗来说,就是多种形态。
多态分为编译时多态(静态多态)和运行时多态(动态多态)。
静态多态主要是函数重载和函数模板,它们传入不同类型的参数就可以调用不同的函数,通过参数不同达到多种形态。之所以叫编译时多态,是因为它们实参传给形参的参数匹配是在编译时完成的,我们把编译时一般归为静态,而运行时归为动态。
动态多态主要是指:传不同的对象就会完成不同的行为,达到多种形态。比如一个动物叫声的行为(函数),传一个猫对象过去就是'喵喵',传一个蛇对象过去就是'嘶嘶',传一个狗对象过去就是'旺旺'。
2. 多态的定义及其实现
2.1 构成多态的条件
多态是一个继承关系下的类对象,去调用同一函数,产生了不同的行为。
比如学生买火车票,是学生票,普通人买票就是普通票。
条件:
- 必须是基类的指针或者引用调用虚函数
- 被调用的函数必须是虚函数,并且完成了虚函数重写/覆盖
2.2 虚函数
类成员函数前面加 virtual 修饰,那么这个成员函数被称为虚函数。
注意:非成员函数不能加 virtual 修饰。
class Person {
public:
virtual void BuyTicket() {
cout << "买票全价" << endl;
}
};
2.3 虚函数的重写/覆盖
虚函数的重写:派生类中有一个跟基类完全相同的虚函数(即派生类虚函数与基类虚函数的返回值类型、函数名字、参数列表完全相同),称派生类的虚函数重写了基类的虚函数。
虚函数的隐藏:在重写条件的基础上,只是派生类的参数列表没有与基类保持一致,构成隐藏(而非覆盖)。

class Person {
public:
virtual void {
cout << << endl;
}
};
: Person {
:
{
cout << << endl;
}
};
{
people.();
}
{
Person Mike;
(Mike);
Student John;
(John);
}


