C++:重写和重载

重写(Override)和重载(Overload)是面向对象编程中常用的两个概念,它们虽然都涉及到方法的定义,但是在实现和使用上有着不同的特点。

重写(Override):
重写是指在子类中重新定义(覆盖)了父类中的某个方法,方法名、参数列表和返回类型必须完全一致。重写的目的是为了在子类中修改或者扩展父类方法的行为,使得子类能够根据自身的特点来实现特定的功能,当子类对象调用被重写的方法时,将执行子类中的方法,而不是父类中的方法。

示例:

//父类
class Animal
{
public:
    Animal(){};
    ~Animal(){};
    
    //动物:吃行为
    void eat(){
    std::cout << "Eat 函数" << std::endl;
    }
};
​
//子类
class Cat : public Animal
{
public:
    Cat(){};
    ~Cat(){};
    
    //子类中重写eat方法
    void eat() {
        std::cout << "Cat Eat 函数" << std::endl;
    }
};

Cat类中定义了一个与父类中eat()函数同名的函数,这是方法的重写。这意味着当在Cat类的对象上调用eat()函数时,将会执行Cat类中的eat()函数而不是父类中的eat()函数。

那么此时再程序中创建Cat对象并调用其eat函数:

int main() {
    Cat * catObjA = new Cat;
    catObjA->eat();
    delete catObjA;
​
    system("pause");
    return 0;
}

结果为:

如果这个时候还想使用子类对象调用其父类的成员方法时就需要使用::符号进行调用:

int main() {
    Cat * catObjA = new Cat;
    //子类中的eat方法
    catObjA->eat();
    
    //调用父类中的eat方法
    catObjA->Animal::eat();
    delete catObjA;
​
    system("pause");
    return 0;
}

此时就能够正常调用父类中的成员方法:

重载(Overload)
重载是指在同一个类中定义多个方法,它们具有相同的名称但是参数列表不同(参数类型、参数个数或参数顺序不同)的特点,重载的目的是为了让方法在功能上相似但参数不同的情况下能够使用相同的名称,从而提高代码的可读性和易用性。编译器根据方法调用时提供的参数列表来确定调用哪个重载版本的方法。

示例:

class Cat
{
public:
    //函数重载
    void run() {
        std::cout << "Cat Run 函数" << std::endl;
    }
​
    void run(int acount) {
        std::cout << acount << "个 Cat Run 函数" << std::endl;
    }
​
    void run(int a,int b) {
        std::cout << a+b << "个 Cat Run 函数" << std::endl;
    }
}

这段代码展示了C++中的函数重载(Function Overloading)的情况;一个简单的类,其中包含了三个名为run()的成员函数,它们的参数列表不同。

  • 第一个run()函数没有参数,当调用它时,输出"Cat Run 函数"。

  • 第二个run()函数接受一个整数参数acount,当调用它时,输出"acount 个 Cat Run 函数"。

  • 第三个run()函数接受两个整数参数ab,当调用它时,输出"a + b 个 Cat Run 函数"。

这种情况被称为函数重载。函数重载是指在同一个作用域内定义了多个名称相同但参数列表不同的函数。编译器会根据调用时提供的参数类型和数量来决定调用哪个版本的函数。

在主函数中进行Cat对象创建且调用cat对象中重载的run方法:

int main() {
    Cat * catObj = new Cat;
    catObj->run();
    catObj->run(1);
    catObj->run(1, 2);
    delete catObj;
    system("pause");
    return 0;
}

编译器自动根据调用时提供的参数类型和数量来决定调用哪个版本的函数。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Web安全研究(九)

知识星球 首先推荐一下我们的知识星球,以AI与安全结合作为主题,包括AI在安全上的应用和AI本身的安全; 加入星球你将获得: 【Ai4sec】:以数据驱动增强安全水位,涵盖内容包括:恶意软件分析,软件安全,AI安全,数据安全,系统安全,流量分析,防爬,验证码等安全方向。…

linux安装 mysql

环境&#xff1a;centOS8 一、安装 1 安装wget库 sudo yum -y install wget 2. 安装 mysql 换yum源 亲测成功&#xff01;&#xff01;&#xff01;&#xff01;&#xff01;&#xff01; 换yum源 1.下载对应版本的repo文件 wget -O CentOS-Base.repo http://mirrors…

今日arXiv最热大模型论文:首个面向AI的python编程框架,提升大模型编程能力新思路

高级编程语言Python有两个受众&#xff1a;一是编译和执行程序的机器&#xff0c;二是阅读、理解和编写程序的人类。机器关注程序的语义操作&#xff0c;而人类更强调代码的可读性。Python在语法中融入了许多以人类为中心的设计元素&#xff0c;以“可读性至上”为设计原则&…

【蓝桥杯备赛国赛】5-5

文章目录 求阶乘双子数 求阶乘 求阶乘 分析k的范围&#xff0c;10的18次方。这个数字很大 想要末尾有0的存在必须要2和5&#xff0c;但是通过分析2的数目应该是远远多于5的&#xff0c;所以只要5的数目够多即可。所以for循环的层次也是10的九次方以上&#xff0c;必然会超时&…

项目|保障房房产管理系统,政务房产解决方案

一、系统概况 保障房管理系统是是为了落实中央关于住房保障的相关政策&#xff0c;实现对低收入家庭住房状况的调查管理、保障计划及落实管理、保障申请及审核管理、保障户和保障房源档案管理等。 针对政府保障房产管理的一站式解决方案&#xff0c;专注于为解决复杂、繁琐的…

python+barcode快速生成条形码(电商测试小工具)

背景 需要测试自助收银机&#xff0c;每次都要在线生成条码&#xff0c;而且生成次数还有限制 需求 满足自定义条形码&#xff0c;可以生成条形码图片 方案 python 3.8以上 barcode 1.0.4 python-barcode 0.15.1 代码 用于生成Code128条形码…

FTP和NFS

一、FTP 1.FTP原理 FTP&#xff08;file Transfer Protocol&#xff0c;文件传输协议&#xff09;&#xff0c;是典型的C/S架构的应用层协议&#xff0c;由客户端软件和服务端软件两个部分共同实现文件传输功能&#xff0c;FTP客户端和服务器之间的连接时可靠的&#xff0c;面…

【题解】NowCoder Fibonacci数列

题目来源&#xff1a;牛客 题目链接&#xff1a;Fibonacci数列 Fibonacci数列 题目描述&#xff1a; Fibonacci 数列是这样定义的&#xff1a; F[0] 0 F[1] 1 for each i ≥ 2 : F[i] F[i-1] F[i-2] 因此&#xff0c;Fibonacci 数列就形如&#xff1a;0, 1, 1, 2, 3, 5…

uniapp生成二维码(uQRCode)与自定义绘制样式与内容

二维码生成使用了一款基于Javascript环境开发的插件 uQRCode &#xff0c;它不仅适用于uniapp&#xff0c;也适用于所有Javascript运行环境的前端应用和Node.js。 uQRCode 插件地址&#xff1a;https://ext.dcloud.net.cn/plugin?id1287 目录 1、npm安装 2、通过import引…

HarmonyOS NEXT星河版之模拟图片选择器(下)---使用CustomDialog展示图片

文章目录 一、目标二、开撸2.1 自定义弹窗2.2 主页面事件处理2.3 主页面完整代码 三、小结 一、目标 二、开撸 2.1 自定义弹窗 CustomDialog export struct SinglePreviewDialog {// 弹窗控制器 mustcontroller: CustomDialogController// 展示图片URLimgUrl: ResourceStr b…

C++进阶之路:何为命名空间、缺省参数与函数重载

✨✨ 欢迎大家来访Srlua的博文&#xff08;づ&#xffe3;3&#xffe3;&#xff09;づ╭❤&#xff5e;✨✨ &#x1f31f;&#x1f31f; 欢迎各位亲爱的读者&#xff0c;感谢你们抽出宝贵的时间来阅读我的文章。 我是Srlua小谢&#xff0c;在这里我会分享我的知识和经验。&am…

JS基础:输出信息的5种方式详解

你好&#xff0c;我是云桃桃。 一个希望帮助更多朋友快速入门 WEB 前端的程序媛。 云桃桃-大专生&#xff0c;一枚程序媛&#xff0c;感谢关注。回复 “前端基础题”&#xff0c;可免费获得前端基础 100 题汇总&#xff0c;回复 “前端基础路线”&#xff0c;可获取完整web基础…

linux部署yum仓库

一. Yum概述 1.yum简介 基于RPM包构建的软件更新机制 可以自动解决依赖关系 所有软件包由集中到YUM软件仓库提供 2.yum工作原理 c/s模式 客户端根据配置文件找到yum仓库服务器的位置 服务端向客户端发送元数据包(包含 软件依赖关系 软件的位置) #相当于软件安装目录 客户…

vue2 中web端播放rtsp视频流 通过ffmpeg(海康威视录像机)

文章目录 一、安装ffmpeg二、配置系统ffmpeg环境变量三、node搭建websocket服务四、vue播放视频 注意&#xff1a;这个方法实现了本地rtsp视频的播放&#xff0c;暂时没考虑服务器部署 参考文章&#xff1a;vue中web端播放rtsp视频流&#xff08;摄像头监控视频&#xff09;&am…

书生浦语训练营第2期-第6节作业

一、基础作业 1.1 Lagent Web Demo 使用 1.2 AgentLego 直接使用部分 二、进阶作业 2.1 AgentLego WebUI 使用 2.2 使用 Lagent 自定义工具 2.3 使用AgentLego自定义工具

Unity Navigation 入门(新版)

概述 在游戏的制作过程中&#xff0c;寻路功能一定是非常重要的部分&#xff0c;他可以为主角寻路&#xff0c;也可以运用到敌人追击等&#xff0c;相比于自己实现的难度&#xff0c;使用寻路组件就显得简单的多&#xff0c;那接下来就开始学习这部分的内容吧 1.安装AI Naviga…

【vue+echarts】绘制中国地图,3D地图,省、市、县三级下钻以及回钻,南海诸岛小窗化显示,点位飞线图,点位名称弹窗轮播展示,及一些常见问题

先看效果展示图 目录 准备工作一, 绘制3D地图1,调用官网地址接口获取2,去官网下载中国地图的json数据到本地,本地引入 二, 南海诸岛小窗化显示1, 手动过滤掉,只保留小窗化的南海诸岛2, 代码层面过滤掉,只保留小窗化的南海诸岛 三, 省、市、县三级地图下钻及回钻1, 下钻2, 回钻…

YApi的在IDEA中的使用

1 IDEA中插件下载 2 misc.xml的配置 <component name"yapi"><option name"projectToken">XXXXXXXXXX</option><option name"projectId">47</option><option name"yapiUrl">http://XXXX:3000<…

第10篇:创建Nios II工程之控制单个七段数码管

Q&#xff1a;还记得之前使用Verilog case语句来描述实现七段数码管的逻辑功能。本期我们创建Nios II工程用C语言代码实现相同的功能。 A&#xff1a;基本原理&#xff1a;一个七段数码管由7个发光二极管LED组成&#xff0c;所以控制一个数码管的显示即控制7个LED。我们在之前…

效率工具Cmder与文件拆分

Cmder安装&#xff1a; 网站下载&#xff0c;解压缩&#xff0c;使用管理员身份打开Cmder可执行程序。 Cmder鼠标右键快捷点打开设置 样式图&#xff1a; 命令&#xff1a;以管理员的身份打开Cmder.exe, 输入命令: Cmder.exe /REGISTER ALL 执行完之后回到桌面&#xff0c;…