结合以下 C++ 代码,深入理解重载(Overload)、隐藏(Hide) 和覆盖(Override,也叫重写) 这三个核心概念,用这段代码作为核心案例,由浅入深地拆解它们的区别和本质。
一、先明确三个概念的核心定义
这三个概念都是 C++ 中函数名复用的场景,但适用范围、规则和目的完全不同,先看一张对比表建立整体认知:
| 概念 | 中文名称 | 适用范围 | 核心特征 | 本质目的 |
|---|---|---|---|---|
| Overload | 重载 | 同一个作用域内 | 函数名相同,参数列表(个数/类型/顺序)不同,返回值不影响 | 方便同一功能的不同参数调用 |
| Override | 覆盖/重写 | 子类与父类之间 | 子类重写父类的虚函数,函数签名(名 + 参数+const)完全一致 | 实现多态(运行时动态绑定) |
| Hide | 隐藏/遮蔽 | 子类与父类之间 | 子类函数名覆盖父类同名函数(无论参数/虚函数与否),编译期静态屏蔽 | 作用域优先原则导致的'遮蔽' |
覆盖是特殊的隐藏。
二、结合代码逐个拆解
逐个分析这三个概念,并用扩展代码演示效果。
1. 重载(Overload)—— 同一作用域内的'同名不同参'
核心规则:
- 必须在同一个类/同一个作用域中;
- 函数名完全相同;
- 参数列表必须不同(个数、类型、顺序,三者至少一个不同);
- 返回值、是否是虚函数不影响重载(但仅返回值不同不算重载)。
代码中的重载案例:
在 Base 类中,两个 show 函数就是典型的重载:
class Base {
public:
Base(int a) : ma(a) {}
// 重载 1:无参 show
virtual void show() {
cout << "Base::show()" << endl;
}
// 重载 2:带 int 参数的 show —— 与上面构成重载
virtual void show( i) {
cout << << endl;
}
:
ma;
};

