C++:重载、重定义和重写的概念和区分

在c++中我们经常会遇见“重载、重定义、重写”的概念,三个概念名字很像,很容易混淆,今天我们对三者进行一个区分。
1.重载(overload)
函数重载是函数的一种特殊情况,其特点是:
(1)在同一作用域(全局作用域、局部作用域、类作用域);
(2)函数名相同;
(3)形参列表(参数个数、参数类型、参数顺序)必须不同;
(4)返回值可以不同;
(5)virtual关键字可有可无。
举例:
下面,我们看一看这种情况能否构成重载?
根据上面我们所说的重载的特点,看起来这两个函数好像还可以构成重载,但实际上是不可以的,原因是:仅仅返回值类型不同,不能构成重载!
2.重写(覆盖)
覆盖是c++多态的实现基础,指派生类重新定义基类的虚函数。其特点是:
(1)在不同的作用域中(分别在基类和派生类中);
(2)函数名相同;
(3)参数相同;
(4)返回值类型相同(协变例外:基类中的虚函数返回base*,派生类中返回derived*);
(5)基类函数必须有virtual关键字,派生类可有可无(因为派生类继承基类后就会有该关键字),但基类不能有static关键字;
(6)访问修饰符可以不同(例如基类virtual 是 private 的,派生类中重写改写为 public,protected 也是可以的)。
举例:
3.重定义(隐藏)
在继承体系中,子类和父类中有同名成员,子类成员将屏蔽父类对成员的直接访问。(在子类成员中,可以使用基类: :基类成员访问)。重定义的特点如下:
(1)在不同的作用域中(分别在基类和派生类中);
(2)函数名相同;
(3)返回值可以不同;
(4)在基类和派生类中,只要不构成重写就是重定义(即:参数相同时:基类没有关键字virtual,基类的函数被隐藏;参数不同时:无论基类有无关键字virtual,基类函数都被隐藏)。
举例:

基于物联网技术的视频安防监控系统的设计及应用
HDC.Cloud 2023 | 软通动力携手华为云打造端到端服务,为企业数字化保驾护航
Techradar公布 2019年最佳智能手机的排行榜,华为P30只能屈居第二
年轻潮人们喜爱的Hi nova9系列,究竟有什么魅力?
VR医疗公司将为患者提供远程医疗解决方案
C++:重载、重定义和重写的概念和区分
浅谈连接器选型的10个原则
共建鸿蒙生态 中软国际与深开鸿共创开鸿智联新突破
SFUAS太阳能固定翼无人飞机系统成功飞行测试和运行
8020d的游戏手柄引脚
消费者与商业、工业与军用产品等级之间区别
AP5186 三功能内部VDD稳压管过温保掮 LED驱动IC
LDT0-028K压电薄膜PVDF传感器
一文解析电动车底盘的技术动向
如何提升企业核心竞争力对小米至关重要|一句话点评
智能家居对我们生活的影响
红外热成像设备在机器人领域的应用
彩虹EDM图纸管理软件解决方案
区块链数字资产场外OTC交易平台开发C2C交易系统开发
基于TMS320F2812实现数字逆变电源的设计