1. 多态的概念
多态(Polymorphism)通俗来说就是'多种形态'。在 C++ 中,它主要分为编译时多态(静态多态)和运行时多态(动态多态)。
编译时多态主要体现为函数重载和模板。编译器在编译阶段根据实参类型匹配形参,从而调用不同的函数版本,这种机制被称为静态绑定。而运行时多态则更为灵活,同一个行为接口在不同对象上表现出不同的执行逻辑。比如买票这个行为,普通人全价,学生优惠,军人优先;再比如动物叫,猫对象调用会发出喵声,狗对象调用则是汪汪声。

2. 多态的实现与定义
2.1 多态的构成条件
多态通常发生在继承体系下,基类指针或引用指向派生类对象,并调用虚函数时产生不同行为。要实现多态效果,必须满足两个核心条件:
- 必须通过指针或引用调用虚函数。只有基类的指针或引用才能同时指向基类和派生类对象。
- 被调用的函数必须是虚函数。派生类需要对基类的虚函数进行重写(Override),否则无法体现多态差异。
注意:如果直接通过对象调用函数,或者函数未声明为 virtual,即使存在继承关系,也不会触发多态,而是发生静态绑定。
2.2 虚函数
在类成员函数前加上 virtual 关键字修饰,该函数即成为虚函数。非成员函数不能声明为虚函数。
class Person {
public:
virtual void BuyTicket() {
cout << "买票 - 全价" << endl;
}
};
2.3 虚函数的重写/覆盖
当派生类中存在一个与基类虚函数返回值类型、函数名、参数列表完全相同的成员函数时,称为重写了基类虚函数。
提示:虽然派生类重写时可以不写
virtual关键字(因为继承后属性已保留),但为了代码规范性和可读性,建议显式写出。考试或面试中常考察这一点。
class Person {
public:
virtual void BuyTicket() {
cout << "买票 - 全价" << endl;
}
};
class Student : public Person {
public:
{
cout << << endl;
}
};
{
ptr->();
}
{
Person ps;
Student st;
(&ps);
(&st);
;
}







