前言:
多态是 C++ 面向对象
三大特性(封装、继承、多态)的核心,它让'同一行为作用于不同对象产生不同结果'成为可能。本文将从多态的基础概念切入,逐步拆解多态的构成条件、虚函数重写规则及关键细节,帮你彻底掌握运行时多态的实现逻辑。
一。多态的概念:从'多种形态说起'
1.1 多态的概念解析
多态通俗来说就是 '多种形态' ,在 C++ 中分为两类:
- 编译时多态 (静态多态):通过函数模板,重载来实现,编译阶段确定调用的函数 (如
add(1,2)和add(1,2,3,4)调用的不同的函数) - 运行时多态 (动态多态):本篇博客核心讲解的地方,通过'基类指针/引用 + 虚函数重写',运行阶段根据指向的对象的类型确定调用的函数
本文代码示例所需头文件:
#include <iostream>
using namespace std;
1.2 生活中的多态示例
最经典的场景就是'买票行为':
- 普通人买票 -> 全价
- 学生买票 -> 半价

用样是'买票',不同对象执行不同逻辑,这就是多态的本质。我们接下来会在代码中通过继承和多态来实现'调用同一函数'产生不同结果。
二。多态的构成条件和核心语法
多态是一个 继承关系 下的类对象,去调用同一函数,产生了不同的行为。比如 Student 继承了 Person。Person 对象买票全价,Student 对象优惠买票 (当然再来个军人对象继承 Person 的话,这个对象去调用也会由不同的结果)
要实现多态,除了要有继承关系,还必须满足下面这两个 强制条件,缺一不可:
- 必须是基类的指针或者引用调用虚函数
- 被调用的函数必须是虚函数,并且派生类对基类的虚函数完成了'重写'(覆盖)。
说明:要实现多态的效果,第一必须是基类的指针或者引用,因为只有基类的指针或引用才能既指向基类对象又指向派生类对象;第二派生类必须对基类的虚函数完成重写/覆盖,重写了,基类和派生类之间才能有不同的函数,多态的不形态效果才能达到。









