C++为函数提供的型特性——缺省参数与函数重载

目录

一、缺省参数

二、函数重载 


一、缺省参数

        C++为函数提供了一项新的特性——缺省参数。缺省参数指的是当前函数调用中省略了实参自动使用的一个值。这极大地提高了函数的灵活性

  1. 缺省参数是声明或定义函数时为函数的参数指定⼀个缺省值 。在调⽤该函数时,如果没有指定实参则采⽤该形参的缺省值,否则使⽤指定的实参
  2. 全缺省就是全部形参给缺省值,半缺省就是部分形参给缺省值。C++规定半缺省参数必须从右往左依次连续缺省,不能间隔跳跃给缺省值
  3. 带缺省参数的函数调⽤,C++规定必须从左到右依次给实参,不能跳跃给实参
  4. 函数声明和定义分离时,缺省参数不能在函数声明和定义中同时出现,规定必须函数声明给缺省值
//缺省参数是声明或定义函数时为函数的参数指定⼀个缺省值//全缺省函数
void test(int x = 1, int y = 2, int z = 3);//半缺省参数
void test(int x, int y, int z = 3);

        对于一个带参数的函数,必须要从右向左依次添加缺省值。也就是说要为某个参数设置缺省值,必须为它的右边所有参数设在缺省值 

//要为某个参数设置缺省值,必须为它的右边所有参数设在缺省值 
void test1(int x = 1, int y = 2, int z)//NO
{cout << x << " " << y << " " << z << endl;
}//要为某个参数设置缺省值,必须为它的右边所有参数设在缺省值 
void test2(int x, int y = 2, int z)//NO
{cout << x << " " << y << " " << z << endl;
}void test3(int x, int y = 2, int z = 3)//YES
{cout << x << " " << y << " " << z << endl;
}void test4(int x = 1, int y = 2, int z = 3)//YES
{cout << x << " " << y << " " << z << endl;
}

 

         带缺省参数的函数调⽤,C++规定必须从左到右依次给实参,不能跳跃给实参

//带缺省参数的函数调⽤,C++规定必须从左到右依次给实参,不能跳跃给实参
void test(int x, int y = 2, int z = 3)
{cout << x << " " << y << " " << z << endl;
}int main()
{//带缺省参数的函数调⽤,必须从左到右依次给实参,不能跳跃给实参test(10);test(10, 100);test(10, 100, 1000);return 0;
}

        下面是错误示范:

int main()
{//不能跳跃给实参test(10, , 1000);test(, , 1000);test(, 100,);return 0;
}

         函数声明和定义分离时,缺省参数不能在函数声明和定义中同时出现,规定必须函数声明给缺省值

//函数声明
void test(int x = 1, int y = 2, int z = 3);//函数定义
void test(int x, int y, int z)
{cout << x << " " << y << " " << z << endl;
}

        下面是错误示范:

//缺省参数不能在函数声明和定义中同时出现,规定必须函数声明给缺省值
//函数声明
void test(int x = 1, int y = 2, int z = 3);//函数定义,这里不能个缺省值
void test(int x = 1, int y = 2, int z = 3)
{cout << x << " " << y << " " << z << endl;
}

         缺省参数,并非编程方面的重大突破,而只是提供了一种便捷的方式。后面在我们设置类的时候,通过使用缺省参数,可以减少定义的构造函数和析构函数既方法重载的数量

二、函数重载 

         函数重载是C++在C语言的基础上新增的功能。缺省参数可以使我们能够使用不同数目的参数调用同一个函数,而函数重载可以使我们能够使用多个同名的函数

函数重载:

  1. 两个函数的参数数目不同,构成函数重载 
  2. 两个函数的参数类型不同,构成函数重载 
  3. 两个函数的参数类型顺序不同,构成函数重载 
  4. 两个函数的返回值不同,不构成函数重载

        两个函数的参数数目不同,构成函数重载 

//两个函数的参数数目不同,构成函数重载 
void print(int x)
{cout << x << endl;
}void print(int x, int y)
{cout << x << " " << y << endl;
}
int main()
{print(1);print(1, 2);return 0;
}

         两个函数的参数类型不同,构成函数重载 

【注意】

        引用类型与类型本身视为同一个类型,不能构成函数重载 

//两个函数的参数类型不同,构成函数重载 
void print(int x)
{cout << x << endl;
}void print(double x)
{cout << x << endl;
}
int main()
{print(1);print(3.14);return 0;
}
//引用类型与类型本身视为同一个类型,不能构成函数重载
void print(int x)
{cout << x << endl;
}
int print(const int& x)
{return x;
}
int main()
{print(1);return 0;
}

        两个函数的参数类型顺序不同,构成函数重载  

//两个函数的参数类型顺序不同,构成函数重载 
void print(int x, double y)
{cout << x << " " << y << endl;
}void print(double x, int y)
{cout << x << " " << y << endl;
}
int main()
{print(1, 3.14);print(3.14, 1);return 0;
}

        两个函数的返回值不同,不构成函数重载

//两个函数的返回值不同,不构成函数重载
void add(int x, int y)
{cout << x + y << endl;
}
//会报错
int add(int x, int y)
{return x + y;
}
int main()
{add(1, 2);cout << add(1, 2) << endl;return 0;
}


 

小结: 

         虽然函数重载很吸引人,但是也不要滥用。仅当函数基本上执行相同的任务,但使用不同类型的数据时,才应该采用函数重载

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

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

相关文章

android 使用MediaPlayer实现音乐播放--权限请求

在Android应用中&#xff0c;获取本地音乐文件的权限是实现音乐扫描功能的关键步骤之一。随着Android版本的不断更新&#xff0c;从Android 6.0&#xff08;API级别23&#xff09;开始&#xff0c;应用需要动态请求权限&#xff0c;而到了android 13以上需要的权限又做了进一步…

go-zero(一) 介绍和使用

go-zero 介绍和使用 一、什么是 go-zero&#xff1f; go-zero 是一个基于 Go 语言的微服务框架&#xff0c;提供了高效、简单并易于扩展的 API 设计和开发模式。它主要目的是为开发者提供一种简单的方式来构建和管理云原生应用。 1.go-zero 的核心特性 高性能&#xff1a; g…

Orcad 输出有链接属性的PDF

安装adobe pdf安装Ghostscript修改C:\Cadence\SPB_16.6\tools\capture\tclscripts\capUtils\capPdfUtil.tcl ​ 设置默认打印机为 Adobe PDF ​ 将Ghostscript的路径修改正确 打开cadence Orcad &#xff0c;accessories->candece Tcl/Tk Utilities-> Utilities->PD…

.NET6 WebApi第1讲:VSCode开发.NET项目、区别.NET5框架【两个框架启动流程详解】

一、使用VSCode开发.NET项目 1、创建文件夹&#xff0c;使用VSCode打开 2、安装扩展工具 1>C# 2>安装NuGet包管理工具&#xff0c;外部dll包依靠它来加载 法1》&#xff1a;NuGet Gallery&#xff0c;注意要启动科学的工具 法2》NuGet Package Manager GUl&#xff0c…

#define定义宏(3)

大家好&#xff0c;今天来给大家介绍一下宏实现的原理以及缺点&#xff0c;还有宏和函数的一些区别&#xff08;下一期给大家详细介绍宏和函数的区别&#xff09;&#xff0c;那么话不多说&#xff0c;我们现在开始。 1.宏和参数不是计算之后传进去&#xff0c;而是替换进去的…

AJAX笔记 (速通精华版)

AJAX&#xff08;Asynchronous Javascript And Xml&#xff09; 此笔记来自于动力节点最美老杜 传统请求及缺点 传统的请求都有哪些&#xff1f; 直接在浏览器地址栏上输入URL。点击超链接提交 form 表单使用 JS 代码发送请求 window.open(url)document.location.href urlwi…

3D Gaussian Splatting 代码层理解之Part2

现在让我们来谈谈高斯分布。我们已经在Part1介绍了如何根据相机的位置获取 3D 点并将其转换为 2D。在本文中,我们将继续处理高斯泼溅的高斯部分,这里用到的是代码库 GitHub 中part2。 我们在这里要做的一个小改动是,我们将使用透视投影,它利用与上一篇文章中所示的内参矩阵…

【YOLOv8】安卓端部署-2-项目实战

文章目录 1 准备Android项目文件1.1 解压文件1.2 放置ncnn模型文件1.3 放置ncnn和opencv的android文件1.4 修改CMakeLists.txt文件 2 手机连接电脑并编译软件2.1 编译软件2.2 更新配置及布局2.3 编译2.4 连接手机 3 自己数据集训练模型的部署4 参考 1 准备Android项目文件 1.1…

进程其他知识点

/* #include <stdlib.h> void exit(int status); #include <unistd.h> void _exit(int status); status 参数&#xff1a;是进程退出时的一个状态信息。父进程回收子进程资源的时候可以获取到。 */ #include <stdio.h> #include <stdlib.h> #include &…

深度解析FastDFS:构建高效分布式文件存储的实战指南(上)

文章目录 一、FastDFS简介1.1 概述1.2 特性 二、FastDFS原理架构2.1 FastDFS角色2.2 存储策略2.3 上传过程2.4 文件同步2.5 下载过程 三、FastDFS适用场景四、同类中间件对比4.1 FastDFS和集中存储方式对比4.2 FastDFS与其他文件系统的对比 五、FastDFS部署5.1 单机部署5.1.1 使…

hhdb数据库介绍(9-21)

计算节点参数说明 checkClusterBeforeDnSwitch 参数说明&#xff1a; PropertyValue参数值checkClusterBeforeDnSwitch是否可见否参数说明集群模式下触发数据节点高可用切换时&#xff0c;是否先判断集群所有成员正常再进行数据节点切换默认值falseReload是否生效是 参数设…

每日一练:【动态规划算法】斐波那契数列模型之第 N 个泰波那契数(easy)

1. 第 N 个泰波那契数&#xff08;easy&#xff09; 1. 题目链接&#xff1a;1137. 第 N 个泰波那契数 2. 题目描述 3.题目分析 这题我们要求第n个泰波那契Tn的值&#xff0c;很明显的使用动态规划算法。 4.动态规划算法流程 1. 状态表示&#xff1a; 根据题目的要求及公…

网页抓取API,让数据获取更简单

网页抓取的过程通常分为以下步骤&#xff0c;尤其是在面对静态网页时&#xff1a; 获取页面 HTML&#xff1a;使用 HTTP 客户端下载目标页面的 HTML 内容。解析 HTML&#xff1a;将下载的 HTML 输入解析器&#xff0c;准备提取内容。提取数据&#xff1a;利用解析器功能&#…

D3中颜色的表示方法大全

d3-color 是 D3.js 库中的一个模块&#xff0c;用于处理颜色。它提供了多种方式来表示和操作颜色。下面是一些常见的颜色表示方法及示例代码&#xff1a; 1. CSS颜色关键字 CSS 颜色关键字是一种简单的方式来指定颜色。例如&#xff1a; const color d3.color("steelbl…

IDEA2023 创建SpringBoot项目(一)

一、Spring Boot是由Pivotal团队提供的全新框架&#xff0c;其设计目的是用来简化新Spring应用的初始搭建以及开发过程。该框架使用了特定的方式来进行配置&#xff0c;从而使开发人员不再需要定义样板化的配置。 二、快速开发 1.打开IDEA选择 File->New->Project 2、…

下一代以区域为导向的电子/电气架构

我是穿拖鞋的汉子&#xff0c;魔都中坚持长期主义的汽车电子工程师。 老规矩&#xff0c;分享一段喜欢的文字&#xff0c;避免自己成为高知识低文化的工程师&#xff1a; 所有人的看法和评价都是暂时的&#xff0c;只有自己的经历是伴随一生的&#xff0c;几乎所有的担忧和畏惧…

详细解析STM32 GPIO引脚的8种模式

目录 一、输入浮空&#xff08;Floating Input&#xff09;&#xff1a;GPIO引脚不连接任何上拉或下拉电阻&#xff0c;处于高阻态 1.浮空输入的定义 2.浮空输入的特点 3.浮空输入的应用场景 4.浮空输入的缺点 5.典型配置方式 6.注意事项 二、输入上拉&#xff08;Inpu…

第8章 硬件维护-8.6 产品变更管理(PCN)

8.6 产品变更管理&#xff08;PCN&#xff09; PCN是Product Change Notice&#xff08;产品变更管理&#xff09;的缩写。PCN是厂商为了提高质量、降低成本主动向客户发起的产品变更。一般涉及如下变更的&#xff0c;需要发布PCN公告。 &#xff08;1&#xff09;生产地址变更…

关于安卓模拟器或手机设置了BurpSuite代理和安装证书后仍然抓取不到APP数据包的解决办法

免责申明 本文仅是用于学习研究安卓系统设置代理后抓取不到App数据包实验,请勿用在非法途径上,若将其用于非法目的,所造成的一切后果由您自行承担,产生的一切风险和后果与笔者无关;本文开始前请认真详细学习《‌中华人民共和国网络安全法》【学法时习之丨网络安全在身边一…

【小程序】dialog组件

这个比较简单 我就直接上代码了 只需要传入title即可&#xff0c; 内容部分设置slot 代码 dialog.ttml <view class"dialog-wrapper" hidden"{{!visible}}"><view class"mask" /><view class"dialog"><view …