在C++中重载、覆盖、隐藏很让人迷糊,刚开始接触C#的时候关于这个用法也让我转了一阵子,今天有时间把我对他们的理解记录了下来,还请各位指正。
在C++中他们是这样定义的:
概念 |
范围 |
参数 |
基类中为virtual? |
重载overload | 同一个类中 | 不同 |
y/n |
---|---|---|---|
覆盖override | 继承 | 相同 |
y |
隐藏hide | 继承 | 相同 |
n |
不同 |
y/n |
覆盖和重写(override)是一个意思:
主要是指你在基类里面定义了一个virtual函数,在派生类中重新实现了这个函数.这就叫覆盖或者重写
隐藏有两种情况:
(1)如果派生类的函数与基类的函数同名,但是参数不同。此时,不论有无virtual关键字,基类的函数将被隐藏(注意别与重载混淆)。
(2)如果派生类的函数与基类的函数同名,并且参数也相同,但是基类函数没有virtual 关键字。此时,基类的函数被隐藏(注意别与覆盖混淆)
下面参照实例看一下:
1、覆盖
















