重载、覆盖(重写)、重定义(同名隐藏)的区别 (超详解)

📚 重载(Overloading)、覆盖(Overriding)、重定义(Hiding)是面向对象编程中常见的概念,它们分别用于描述不同情况下函数或方法的行为。

目录

重载(Overloading)

覆盖(Overriding)

重定义(Hiding)

总结


重载(Overloading)

    重载指的是在同一个作用域内,可以定义多个同名的函数或方法,但它们的参数列表必须不同(包括参数类型、个数或顺序)。编译器会根据调用时提供的参数类型和个数来决定调用哪个具体的函数。

🎃 使用场景:

当需要为同一操作提供多种参数类型支持时,可以使用函数重载。例如,一个打印函数可以接受整数、浮点数、字符串等不同类型的参数。

提供默认参数值也是函数重载的一种形式,这样可以简化函数的调用。

class Example {
public:void print(int num) {// 打印一个整数}void print(double num) {// 打印一个双精度浮点数}
};int main() {Example obj;obj.print(10);      // 调用 void print(int num)obj.print(3.14);    // 调用 void print(double num)return 0;
}

  在Example 类中定义了两个名为 print 的方法,一个接受整数参数,另一个接受双精度浮点数参数。它们之间的区别在于参数的类型。

覆盖(Overriding)

     覆盖指的是派生类重写(override)基类的虚函数。只有虚函数才能被派生类覆盖。通过覆盖,派生类可以提供自己特定的实现,而不使用基类的实现。

🎃 使用场景:

当基类定义了一个虚函数,而派生类需要根据自身的逻辑重新实现这个函数时,使用覆盖。

通过基类指针或引用调用虚函数时,实际执行派生类中的版本,实现运行时多态。

class Base {
public:virtual void display() {cout << "Base class display function" << endl;}
};class Derived : public Base {
public:void display() override {cout << "Derived class display function" << endl;}
};

  Derived 类覆盖了 Base 类中的 display 函数。当通过基类指针或引用调用 display 函数时,实际执行的是派生类 Derived 中的实现。

重定义(Hiding)

     重定义是指在派生类中定义了与基类同名但参数列表不同的函数。在这种情况下,派生类的函数会隐藏基类中的同名函数。这种情况下,基类中的同名函数变得不可见,即使使用基类指针或引用也无法访问到它。

🎃 使用场景:

当派生类需要定义一个与基类同名但参数不同的函数时,这个新函数会隐藏基类中的同名函数。

使用重定义时需要小心,因为基类的同名函数会被派生类的函数遮蔽,可能导致意外的调用行为。

class Base {
public:void display() {cout << "Base class display function" << endl;}
};class Derived : public Base {
public:void display(int num) {cout << "Derived class display function with integer: " << num << endl;}
};

  Derived 类定义了一个名为 display 的函数,带有一个整数参数。它重定义了 Base 类中的 display 函数。如果我们尝试通过基类指针或引用调用 display,编译器将会报错,因为没有与指定参数列表匹配的基类函数。

总结

重载:同一作用域内多个函数名相同但参数列表不同。

覆盖:派生类重写基类的虚函数,提供特定实现。

重定义:派生类中定义了与基类同名但参数列表不同的函数,导致基类函数不可见。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/web/42252.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

ST7789 linux4.x驱动

文章目录 ST7789 linux4.x驱动设备树配置驱动程序编译驱动测试驱动 ST7789 linux4.x驱动 设备树配置 pinctrl_ecspi2_cs_1: ecspi2_cs_grp-1 {fsl,pins <MX6UL_PAD_CSI_DATA01__GPIO4_IO22 0x40017059>; };pinctrl_ecspi2_1: escpi2grp {fsl,pins <MX6UL_PAD_CSI_…

RocketMQ快速入门:主从、集群模式原理及搭建实操(十一)

目录 0. 引言1. 前备知识1.1 namesrv集群模式1.2 broker集群模式1.2 broker主从复制原理 2. 集群部署2.1 环境准备2.2 配置讲解2.3 一主多从模式部署2.4 多主无从模式部署2.5 多主多从模式部署 3. 总结 0. 引言 在学习完rocketmq的基础知识后&#xff0c;我们进入rocketmq高可…

痉挛性斜颈对生活有哪些影响?

痉挛性斜颈&#xff0c;这个名字听起来可能并不熟悉&#xff0c;但它实际上是一种神经系统疾病&#xff0c;影响着全球数百万人的生活质量。它以一种无法控制的方式&#xff0c;使患者的颈部肌肉发生不自主的收缩&#xff0c;导致头部姿势异常。对于患者来说&#xff0c;痉挛性…

和Bug较劲的第n天:[Error: Unable to open snapshot file: No such file or directory]

问题描述 最近做了一个小demo&#xff0c;基于parcel的&#xff0c;在迁移仓库的时候发生了一个报错 [Error: Unable to open snapshot file: No such file or directory] 原因分析&#xff1a; 在迁移仓库的时候&#xff0c;我将项目放入了一个以中文命名的文件夹里&#xf…

模电基础 - 信号的运算和处理

目录 一. 简介 二. 加法 三. 减法 四. 乘法 五. 除法 六. 总结 一. 简介 在模电基础中&#xff0c;信号的运算和处理是非常重要的内容。 信号的运算包括加法、减法、乘法、除法等。通过使用集成运放&#xff0c;可以很容易地实现这些运算。例如&#xff0c;利用反相输入…

算法的几种常见形式

算法&#xff08;Algorithm&#xff09; 算法&#xff08;Algorithm&#xff09;是指解决问题或完成任务的一系列明确的步骤或规则。在计算机科学中&#xff0c;算法是程序的核心部分&#xff0c;它定义了如何执行特定的任务或解决特定的问题。算法可以用多种方式来表示和实现…

宜春旅游集散中心展厅OLED透明屏方案设计

一、项目概述 为提升宜春旅游集散中心展厅的现代化展示水平&#xff0c;增强游客的参观体验&#xff0c;我们计划在展厅的核心区域引入OLED透明屏技术。该方案旨在通过高科技的视觉呈现方式&#xff0c;将展品信息以虚拟与现实相结合的方式展现&#xff0c;打造出一个既具科技感…

谷粒商城学习笔记-22-分布式组件-SpringCloud-OpenFeign测试远程调用

文章目录 一&#xff0c;OpenFeign的简介二&#xff0c;OpenFeign的使用步骤1&#xff0c;场景说明2&#xff0c;引入依赖2&#xff0c;开启OpenFeign3&#xff0c;编写Feign接口4&#xff0c;使用feign调用远程接口5&#xff0c;验证 错误记录 上一节学习了注册中心&#xff0…

鼠标录制工具|键鼠轨迹录制,实现自动办公

利用键鼠录制工具录制固定的鼠标点击、键盘输入等操作&#xff0c;实现自动化执行固定操作&#xff0c;节省时间。鼠标录制功能可以录制多步骤的操作&#xff0c;将录制的动作保存并命名&#xff0c;甚至可以编辑操作速度。下面将演示几种生活中常见的案例&#xff0c;详细讲解…

企业微信hook接口协议,移除群成员通知

移除群成员通知 返回示例 {"flag": 0, "receiver": 0, "sender_name": "", "is_room": 1, "server_id": 15318083, "send_time": 1687688952, "sender": 1688855749266556, "referid&…

k8s中使用cert-manager生成自签名证书

一、安装 cert-manager 注意查看cert-manager和K8S支持的对应版本 我的 k8sv1.28.2&#xff0c;cert-manager v1.12.11 下载 cert-manager.yaml 文件&#xff0c;执行 kubectl apply -f cert-manager.yaml二、生成自签名证书 cert-selfsigned.yaml apiVersion: cert-manage…

【SpringBoot】随机盐值+双重SHA256加密实战

目录&#xff1a; 1.SHA-256和随机盐值 2.前端实现 3.后端实现 1.SHA-256和Salt 1.1.什么是SHA-256 SHA-256是一种信息摘要算法&#xff0c;也是一种密码散列函数。对于任意长度的消息&#xff0c;SHA256都会产生一个256bit长的散列值&#xff08;哈希值&#xff09;&…

插件更新了!

最近花了点时间&#xff0c;给网页插件添加了新功能&#xff0c;下面简单给大家介绍一下如何使用 我们安装好插件后&#xff0c;进入网页就可以看到一个带logo的按钮了&#xff0c;我们可以点一下就可以跳出快捷操作 不同页面点击会出现不同的功能&#xff0c;大家可以根据自己…

dy商品评论采集

摘要 本文将详细介绍如何通过抖音商品评论采集来获取精准的用户反馈&#xff0c;从而优化产品和营销策略。通过这个指南&#xff0c;您将学会如何设置评论采集系统&#xff0c;分析用户评论数据&#xff0c;以及如何利用这些数据来吸引更多粉丝&#xff0c;增加商品销量。 返…

跨境传输需要遵守哪些准则,如何做到有效管控?

在全球化的商业环境中&#xff0c;跨国企业面临着数据跨境传输的挑战。随着业务的扩展&#xff0c;企业需要在不同国家和地区之间高效、安全地传输大量数据。选择合适的跨境传输方案对于保障数据安全、提高业务效率、遵守法律法规至关重要。 跨境传输数据需要遵守的准则和规定主…

Nginx:关于实现跨域代理

运维专题 Nginx&#xff1a;关于实现跨域代理 - 文章信息 - Author: 李俊才 (jcLee95) Visit me at CSDN: https://jclee95.blog.csdn.netMy WebSite&#xff1a;http://thispage.tech/Email: 291148484163.com. Shenzhen ChinaAddress of this article:https://blog.csdn.ne…

数据赋能(142)——开发:数据合并——技术方法、主要工具

技术方法 数据合并的技术方法主要包括以下几种&#xff1a; 轴向连接&#xff08;Concatenation&#xff09;&#xff1a; 使用pd.concat()函数&#xff0c;沿一个轴&#xff08;通常是行或列&#xff09;将多个DataFrame对象连接在一起&#xff0c;形成一个新的DataFrame对…

html自学笔记与面试会问到问题

第一章 1.1什么是JavaScript&#xff1f; 一各跨平台的脚本语言1.2ECMA特点&#xff1a; 由三大部分组成&#xff1a;核心语法(关键字、核心对象、语法)、DOM、BOM1.3 取余运算&#xff08;又叫取模运算&#xff09;&#xff1a; 取余&#xff1a;整除后&#xff0c;除不尽的…

发那科机床联网串口配置

本文章仅针对无网口&#xff0c;需要通过串口输出采集数据情况。跟这篇文章互为参考&#xff0c;一个理论&#xff0c;一个实战。 Fanuc DPRNT宏程序串口采集-CSDN博客 一、禁用机器串口监控 选择System、monit 二、设置参数可写 在MDI模式中字符面板上按OFS/SET键,连按致屏…

终于搞定了通过两路蓝牙接收数据

一直想做无线传感器&#xff0c;通过蓝牙来接收数据&#xff0c;无奈因为arduino接收串口数据的一些问题&#xff0c;一直搁到现在。因为学校里给学生开了选修课&#xff0c;所以手边有一些nano和mega可以使用&#xff0c;所以就做了用两个nano加上两个蓝牙模块来发射数据&…