【C++技能树】原来比C方便这么多 --缺省参数、函数重载、引用讲解

news2024/9/25 12:22:06

 

Halo,这里是Ppeua。平时主要更新C语言,C++,数据结构算法......感兴趣就关注我吧!你定不会失望。

🌈个人主页:主页链接

🌈算法专栏:专栏链接

     我会一直往里填充内容哒!

🌈LeetCode专栏:专栏链接 

    目前在刷初级算法的LeetBook 。若每日一题当中有力所能及的题目,也会当天做完发出

🌈代码仓库:Gitee链接

🌈点击关注=收获更多优质内容🌈

目录

1.缺省参数:

2.函数重载:

3.引用:

完结撒花:

 

1.缺省参数:

在C++中

如果想要在一个函数不给定具体参数的情况下使用一个默认值就可以用到缺省参数这个概念.

具体用法如下在声明/定义时给定默认值即可,

int add(int a=0,int b=1);
int add(int a,int b)
{
    return a+b;
}
int main()
{
    cout<<add(12);
}

例如这里就给定了第一个参数.而没有给第二个参数,所以默认为1,所以A+B的值就变成了13

注意!!

int add(int a=0,int b=1);
int add(int a=0,int b=1)
{
    return a+b;
}

不能在声明与定义同时给出默认参数,即使值是一样,这样也是错的.

所以只能在一个地方(声明/定义)给定默认值.一般在声明时给出

可以全部给定默认值,也可以只给一部分.但只能从右到左连续的给出.

int add(int a,int b=1,int c=2)
{
    return a+b+c;
}
int main()
{
    cout<<add(12);
}

这样就属于跳着给,也是不可以的

int add(int a=1,int b,int c=2)
{
    return a+b+c;
}

2.函数重载:

在C中,若想要使用使用一个add函数返回两数相加的结果.因为这个两数可以是浮点数,整数等.若我们想要准确的表示两个数据相加.就得定义若干个异名函数.

int addi(int a,int b)
{
    return a+b;
}
double addd(double a,double b)
{
    return a+b;
}

例如这里定义了addi表示两个整数相加,又定义了addd表示两个浮点数相加.

那如果我是写库的作者,我需要让一个仅需要相加功能的调用者去了解这么多函数的名字,仅用来区分他们相加的数据类型嘛?

这样的工作效率显然是非常低的,所以C++改进了他的方法.

int add(int a,int b)
{
    return a+b;
}
double add(double a,double b)
{
    return a+b;
}

这两个同名函数,因为参数类型的不同,所以在C++中可以同时存在. 

这就是函数重载的概念.

区分两个函数是否相同不再仅通过名字,而是通过参数个数/类型/类型顺序来区分.

返回值不同不作为区分函数重载的规则,因为你调用该函数的时候可以不适用返回值。

void add(int a,double b); 类型顺序

void add(double a,int b); 类型顺序 参数个数

void add(double a,int b,int c); 参数个数

 为什么能进行区分呢?

因为在C++中,在编译阶段,会这样对函数进行命名.

第一个函数被命名为:addid 表示参数类型为int 与 double

第二个函数被命名为:adddi 表示参数类型为double 与 int

第三个函数被命名为: adddii 表示参数类型为double、int、int 

使用重载函数并不会导致程序运行变慢,因为改变名字的事是在编译阶段就完成了,程序运行阶段直接去寻找对应的函数.所以并不需要有这种担心.

3.引用:

先来看看我们最开始学编程的时候学习的代码

int a=0;

int b=a;

这段代码很简单,但他在内存里做的事相信很多uu们并不知道.我们现在来看看

这段代码是将a指向的数据又拷贝了一份放在b中,也就是a、b变成了两个独立的个体.他们的共同点也就是值相同.

我们可以打印他的地址来看看

 int a=0;

 int b=a;

 printf("a:%p \nb:%p",&a,&b);

 

结果如图所示,说明我们说的是对的.

那我们再来看看C++新加入的引用特点.

 int a=0;

 int &b=a;

 printf("a:%p \nb:%p",&a,&b);

仅在b前面加上一个&(注意!!!加在a前表示取地址)

再打印地址,看看会发生什么.

 他们的内存地址相同了!也就是现在的内存模型应该长这样

 a b都表示这块内存地址的一个别名.除了名字不同,其他都是相同的.也就是改变a也会改变b

这段代码同样的非常简单,但是这样写是错的,因为形参的改变不影响实参,我们仅需这样改动 

void swap(int a,int b)
{
    int tmp=a;
    a=b;
    b=tmp;
}
int main()
{
    int a=2;
    int b=3;
    swap(a,b);
    cout<<"a:"<<" "<<a<<endl;
    cout<<"b: "<<b<<endl;
}

  

 在函数调用参数前加上&,表示对实参的引用,这样他们使用的是同一块内存空间.也就可以直接改变了

void swap(int &a,int &b)
{
    int tmp=a;
    a=b;
    b=tmp;
}
int main()
{
    int a=2;
    int b=3;
    swap(a,b);
    
}

 

 

完结撒花:

🌈本篇博客的内容【原来比C方便这么多 --缺省参数、函数重载、引用讲解】已经结束。

🌈若对你有些许帮助,可以点赞、关注、评论支持下博主,你的支持将是我前进路上最大的动力。

🌈若以上内容有任何问题,欢迎在评论区指出。若对以上内容有任何不解,都可私信评论询问。

🌈诸君,山顶见!

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

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

相关文章

DPCNN分类模型

论文 Deep Pyramid Convolutional Neural Networks for Text Categorization 提出深层金字塔卷积网&#xff08;DPCNN&#xff09;是 word-level 的广泛有效的深层文本分类卷积神经网络&#xff0c;比 TextCNN&#xff08;浅层CNN&#xff09;性能明显提高。 TextCNN 不能通过卷…

Unity InputSystem (一)

什么是InputSystem InputSystem 是 2019 年 Unity 新推出的插件&#xff0c;输入系统包实现了一个系统来使用任何类型的输入设备来控制你的 Unity 内容。它旨在成为 Unity 的经典输入管理器更强大、更灵活、更可配置的替代品。 新输入系统基于事件&#xff0c;输入设备和动作逻…

Redis 哨兵和集群

文章目录1. 单机模式2. 主从架构3. 哨兵4. 集群模式5. 哈希槽是什么&#xff1f;1. 单机模式 Redis 单副本&#xff0c;采用单个 Redis 节点部署架构&#xff0c;没有备用节点实时同步数据&#xff0c;不提供数据持久化和备份策略&#xff0c;适用于数据可靠性要求不高的纯缓存…

【硬件外设使用】——SPI

【硬件外设使用】——SPI SPI基本概念SPI通信协议SPI使用方法pyb.spimachine.spi SPI可用的传感器 SPI基本概念 SPI是一种串行端口通信接口&#xff0c;它是一种同步的全双工协议&#xff0c;用于在数字电路之间传输数据。SPI代表串行外设接口&#xff0c;是一种非常流行的数字…

UDS诊断测试

UDS&#xff08;Unified Diagnostic Services&#xff0c;统一的诊断服务&#xff09;诊断协议是在汽车电子ECU环境下的一种诊断通信协议。这种通信协议被用在几乎所有由OEM一级供应商所制造的新ECU上面。这些ECU控制车辆的各种功能&#xff0c;包括电控燃油喷射系统&#xff0…

TI在物联网和AI边缘计算中落伍了吗?

摘要&#xff1a;本文介绍一下TI在边缘计算工作中所做的努力。 发明“人工智能”这个term的老头儿也不会想到人工智能在中国有多火。 不管是懂还是不懂&#xff0c;啥东西披上“人工智能“的面纱都能瞬间成为大项目。 学习AI 的年轻人认识NVIDIA&#xff0c;可能不太知道DSP是…

金毅:10x HTAP,企业级关系型数据库内核技术创新与演进

导语4月8日下午&#xff0c;为期两天的第十二届数据技术嘉年华&#xff08;DTC 2023&#xff09;在北京新云南皇冠假日酒店圆满落下帷幕。大会以“开源融合数字化——引领数据技术发展&#xff0c;释放数据要素价值”为主题&#xff0c;汇聚产学研各界精英到场交流。作为大会的…

网络原理之UDP

hi,大家好,又见面了,今天为大家介绍一下UDP的网络原理&#x1f437;&#x1f437;&#x1f437; 文章目录认识UDP报文格式UDP特点TCP,UDP应用场景基于UDP的应用层协议认识UDP报文格式 UDP特点 TCP,UDP应用场景 基于UDP的应用层协议 1.认识UDP报文格式 其实在真正传输的…

批量记录收支明细:手把手教你如何查看上个月的收支明细并打印。

记录收支明细太久&#xff0c;想要快速查看并筛选出上个月的某一个明细要如何进行查询&#xff0c;还要进行打印要如何操作&#xff1f;今天就由小编来教教大家要如何操作。 首先第一步&#xff0c;我们要进入晨曦记账本主页面&#xff0c;点击主页面上方功能栏里的“添加收支…

聚焦云原生安全|安全狗云甲荣膺CSA 2022安全金盾奖

4月13日&#xff0c;第六届云安全联盟大中华区大会“年度颁奖典礼”表彰仪式顺利开展。作为国内云原生安全领导厂商&#xff0c;安全狗也收到邀请出席此次活动。​ 此次活动上&#xff0c;“年度颁奖典礼”作为重要环节之一&#xff0c;获得业界的关注。安全狗旗下云原生安全产…

zabbix介绍及部署(超详细讲解)

目录 1.zabbix的基本概述 2.zabbix的构成 1、Server 2、web页面 3、数据库 4、proxy 5、Agent 3.zabbix的监控对象 4.zabbix的常用术语 5.zabbix的工作流程 1、主动模式 2、被动模式 6.zabbix进程详解 7.zabbix的监控框架 1、server_client架构 2、zabbix_prox…

一文搞懂C#工程中程序数据库文件.pdb(符号文件)的作用,延伸搞懂Debug/Release、AnyCPU(首选32位)/x86/x64/ARM的区别

一、准备工作 MS引用&#xff1a;在 Visual Studio 调试器&#xff08;C#、C、Visual Basic、F#&#xff09;中指定符号 (.pdb) 和源文件 MS引用&#xff1a;为 C#、ASP.NET 或 Visual Basic 项目 &#xff08;.NET Framework&#xff09; 生成符号文件 MS引用&#xff1a;用…

ASP.NET动态Web开发技术第6章续

第6章续ASP.NET内置对象一.预习笔记 1.ASP.NET提供了七大内置对象&#xff0c;Page、Request、Response、Application、Session、Server和Cookies。这些对象使用户更容易收集通过浏览器请求发送的信息、响应浏览器以及存储用户信息&#xff0c;以实现其他特定的状态管理和页面…

【动力节点】杜老师Vue笔记——Vue程序初体验

目录 一、Vue程序初体验 1.1 下载并安装vue.js 1.2 第一个Vue程序 1.3 Vue的data配置项 1.4 Vue的template配置项 一、Vue程序初体验 可以先不去了解Vue框架的发展历史、Vue框架有什么特点、Vue是谁开发的&#xff0c;对我们编写Vue程序起不到太大的作用&#xff0c;…

云HIS源码 基层卫生健康云HIS源码

云HIS全称为基于云计算的医疗卫生信息系统&#xff08;Cloud-BasedHealthcareInformationSystem&#xff09;&#xff0c;是运用云计算、大数据、物联网等新兴信息技术&#xff0c;按照现代医疗卫生管理要求&#xff0c;在一定区域范围内以数字化形式提供医疗卫生行业数据收集、…

正版软件 Directory Opus 12 Pro Windows 平台上的资源管理器,定是功能完全、可定制化程度高的那款。

Directory Opus 是一款 Windows 平台上的资源管理器&#xff0c;定是功能最完全、可定制化程度最高的那款。你可以通过它完成几乎所有操作&#xff0c;包括查看图片元信息、预览图片、阅读文本文件内容、批量重命名、操作压缩文件以及 FTP 同步请求等。 Directory Opus 是一款由…

QGIS数据可视化学习笔记00——为什么用QGIS以及QGIS设置中文界面

一、为什么用QGIS&#xff1f; 1、qgis的概念 qgis原称Quantum GIS&#xff0c;是开源的桌面地理信息系统软件。 qgis是一款桌面版gis软件&#xff0c;他是基于qt平台使用c开发出来gis软件。 2、qgis的主要特点 1.支持多种GIS数据文件格式 2.集成或支持其他开源GIS&#…

rust的并发以及kv server网络处理和网络安全部分

理解并发和并行 Golang 的创始人之一&#xff0c;对此有很精辟很直观的解释&#xff1a;并发是一种同时处理很多事情的能力&#xff0c;并行是一种同时执行很多事情的手段。 我们把要做的事情放在多个线程中&#xff0c;或者多个异步任务中处理&#xff0c;这是并发的能力。在多…

postman同时传递文件和对象参数

属性 required true 意思为 必填对象属性 /*** descroptions: 再保临分请求* author: c* date: 2023/1/9 14:26* version: 1.0*/public class UwReinsureReportReqDTO extends BaseInfoReqDTO implements Serializable {private static final long serialVersionUID -59047…

No message available问题解决

概述 在EFK日志查询平台断断续续看到若干个应用的报错信息&#xff1a; 排查 上述截图里报错的类&#xff08;省略掉Import语句后&#xff09;&#xff1a; Slf4j RestController public class FilterErrorController extends BasicErrorController {public FilterErrorC…