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

news2024/9/28 15:29:58

📚 重载(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.coloradmin.cn/o/1909230.html

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

相关文章

Zynq系列FPGA实现SDI视频编解码+图像缩放+多路视频拼接,基于GTX高速接口,提供8套工程源码和技术支持

目录 1、前言工程概述免责声明 2、相关方案推荐本博已有的 SDI 编解码方案本博已有的FPGA图像缩放方案本方案的无缩放应用本方案在Xilinx--Kintex系列FPGA上的应用 3、详细设计方案设计原理框图SDI 输入设备Gv8601a 均衡器GTX 解串与串化SMPTE SD/HD/3G SDI IP核BT1120转RGB自研…

一个简单的 Vue 组件例子

https://andi.cn/page/621509.html

17.分频器设计拓展练习-任意分频通用模块

(1)Verilog代码&#xff1a; module divider_n(clk,reset_n,clk_out);input clk;input reset_n;output clk_out;wire clk_out1;wire clk_out2;wire [9:0]n;wire m;assign n 9;assign m n % 2;divider_even divider_even_inst(.clk(clk),.reset_n(reset_n),.n(n),.en(!m),.cl…

多租户hive数仓

1、概念 多租户对应的是单租户&#xff0c;本篇文章重点讲解多租户&#xff0c;单租户为了解内容。 1.1 多租户 多租户技术或称多重租赁技术&#xff0c;简称SaaS&#xff0c;是一种软件架构技术&#xff0c;是实现如何在多用户环境下&#xff08;此处的多用户一般是面向企业…

解锁Playwright新技能:输入框处理技巧全解析

感谢您抽出 来阅读此文 声明&#xff1a;文章中引用的视频为微信群里面的山豆根大佬原创所录制哟~免费视频录制剪辑不易&#xff0c;请大家多多支持。 并且&#xff0c;大佬为这一系列的视频创作还专门购买了服务器搭建了一个实战项目和练习元素定位的网站。网站的具体信息可…

仅需10行代码,Python带你玩转编程世界!

更多Python学习内容&#xff1a;ipengtao.com Python作为一种简单易学且功能强大的编程语言&#xff0c;其简洁的语法和丰富的库可以在很少的代码行数内实现许多有趣且实用的功能。本文将展示一些通过10行以内的Python代码实现的有趣项目&#xff0c;从简单的数学计算到数据可视…

江协科技51单片机学习- p25 无源蜂鸣器

&#x1f680;write in front&#x1f680; &#x1f50e;大家好&#xff0c;我是黄桃罐头&#xff0c;希望你看完之后&#xff0c;能对你有所帮助&#xff0c;不足请指正&#xff01;共同学习交流 &#x1f381;欢迎各位→点赞&#x1f44d; 收藏⭐️ 留言&#x1f4dd;​…

SpringAOP的坑

AOP中几种常见的通知类型及其基本作用&#xff1a; Before&#xff1a;前置通知&#xff0c;在目标方法执行之前执行。After&#xff1a;后置通知&#xff0c;无论方法执行结果如何&#xff08;包括异常&#xff09;&#xff0c;都会在目标方法执行之后执行。AfterReturning&a…

暑期旅游怎么玩?开发旅游小程序让出行变简单

暑假正值旅游旺季&#xff0c;旅游小程序的出现为旅行带来了许多便利。随着移动互联网的发展&#xff0c;旅游行业也在不断寻求创新与变革。旅游小程序为游客提供了更加便捷的旅行体验&#xff0c;通过旅游小程序&#xff0c;用户可以了解旅游信息、旅游服务、在线咨询等&#…

谷粒商城学习笔记-19-快速开发-逆向生成所有微服务基本CRUD代码

文章目录 一&#xff0c;使用逆向工程步骤梳理1&#xff0c;修改逆向工程的application.yml配置2&#xff0c;修改逆向工程的generator.properties配置3&#xff0c;以Debug模式启动逆向工程4&#xff0c;使用逆向工程生成代码5&#xff0c;整合生成的代码到对应的模块中 二&am…

前端面试题25(css常用的预处理器)

在前端开发领域&#xff0c;CSS预处理器在面试中经常被提及&#xff0c;其中最流行的三种预处理器是Sass、LESS和Stylus。下面分别介绍它们的特点和优势&#xff1a; 1. Sass&#xff08;Syntactically Awesome Style Sheets&#xff09; 优势&#xff1a; 变量&#xff1a;允…

[工具类]Java 合并、拆分PPT幻灯片

本文将介绍在Java程序中如何来合并及拆分PPT文档的方法。示例大纲&#xff1a; 1. 合并 1.1 将指定幻灯片合并到文档 1.2 合并多个幻灯片文档为一个文档 2. 拆分 2.1 按幻灯片每一页单独拆分为一个文档 2.2 按指定幻灯片页数范围来拆分为多个文档 使用工具&#xff1a;F…

vite+vue3拍照上传到nodejs服务器

一:效果展示: 拍照效果 二:Nodejs后端接口代码: 三:前端完整代码:

风险评估:Tomcat的安全配置,Tomcat安全基线检查加固

「作者简介」&#xff1a;冬奥会网络安全中国代表队&#xff0c;CSDN Top100&#xff0c;就职奇安信多年&#xff0c;以实战工作为基础著作 《网络安全自学教程》&#xff0c;适合基础薄弱的同学系统化的学习网络安全&#xff0c;用最短的时间掌握最核心的技术。 这一章节我们需…

VUE+ELEMENTUI表格的表尾合计

<el-table :data"XXXX" :summary-method"getSummaries" show-summary "true" > getSummaries(param) { const { columns, data } param; const sums []; columns.forEach((column, index) > { if (index 0) { sums[index] 合计; }…

高考后的IT专业启航:暑期预习指南与学习路线图

文章目录 每日一句正能量前言&#xff1a;启航IT世界&#xff0c;高考后的暑期学习之旅基础课程预习指南基础课程预习指南&#xff1a;构建你的IT知识大厦引言一、计算机科学导论二、编程语言入门三、操作系统基础四、数据结构与算法五、网络基础六、数据库原理结语 技术学习路…

ollama教程——如何在Ollama中导入和管理GGUF与Safetensors模型

ollama教程——如何在Ollama中导入和管理GGUF与Safetensors模型 引言Ollama模型导入概述Ollama支持的模型格式Ollama的版本要求和安装安装OllamaGGUF模型导入什么是GGUF模型通过Modelfile导入GGUF模型代码示例常见问题和解决方案1. 模型文件路径错误2. 模型文件格式不正确3. Ol…

【JS逆向补环境】最新mtgsig参数分析与算法还原

文章目录 1. 写在前面2. 接口分析3. 加密调试分析4. 补环境还原算法 【&#x1f3e0;作者主页】&#xff1a;吴秋霖 【&#x1f4bc;作者介绍】&#xff1a;擅长爬虫与JS加密逆向分析&#xff01;Python领域优质创作者、CSDN博客专家、阿里云博客专家、华为云享专家。一路走来长…

集控中心操作台材质选择如何选择

作为集控中心的核心组成部分&#xff0c;操作台不仅承载着各种设备和工具&#xff0c;更是工作人员进行监控、操作和管理的重要平台。因此&#xff0c;选择适合的集控中心操作台材质显得尤为重要。 一、材质选择的考量因素 在选择集控中心操作台材质时&#xff0c;我们需要综合…

竞赛选题 图像识别-人脸识别与疲劳检测 - python opencv

文章目录 0 前言1 课题背景2 Dlib人脸识别2.1 简介2.2 Dlib优点2.3 相关代码2.4 人脸数据库2.5 人脸录入加识别效果 3 疲劳检测算法3.1 眼睛检测算法3.3 点头检测算法 4 PyQt54.1 简介4.2相关界面代码 5 最后 0 前言 &#x1f525; 优质竞赛项目系列&#xff0c;今天要分享的是…