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;
}


 

小结: 

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

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

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

相关文章

前端框架Vue3基础部分

什么是Vue&#xff1f; Vue是一个能用于构建用户交互页面&#xff08;动态网页&#xff09;的渐进式JavaScript框架&#xff0c;易学易用&#xff0c;性能出色&#xff0c;适用性强的Web前端框架。 Vue的设计模式&#xff1f; Vue的设计模式&#xff1a;MVVM模式 MVVM设计模…

安达发|APS自动排程软件异常预警处理场景介绍

APS生产排单软件通过预先设定好相关基本资料与约束规则&#xff0c;当订单、机台、工具、材料、上下班时间等任何影响生产计划的因素变化后&#xff0c;只需执行“一键式排程计算”&#xff0c;系统即可生成相应的生产计划。它不仅能够高效地安排生产任务&#xff0c;优化资源分…

在阿里云快速启动Appsmith搭建前端页面

什么是Appsmith Appsmith是一个开源的低代码开发平台&#xff0c;它使得开发者能够快速地构建内部工具、业务管理系统、CRM系统等。Appsmith通过提供一系列预建的UI组件&#xff08;如表格、图表、表单等&#xff09;&#xff0c;以及对数据库、API调用的直接支持&#xff0c;…

命令执行简单(棱角社区有毒)

前言&#xff1a;小迪安全2022第一节反弹shell&#xff0c;小迪用的是两台都是云服务器&#xff0c;没有服务器可以在自己的主机上搭建也是可以的&#xff0c;主机上搭两个网站 思路&#xff1a;生成一个木马文件&#xff0c;下载到本机&#xff0c;然后利用本机上传到目标主机…

基于Ruoyi的同一token跨系统访问,后端单点登录并且鉴权方案

基于Ruoyi的同一token跨系统访问,后端单点登录并且鉴权方案 需求场景以及先决条件默认方案改造思路改造代码,一共4个类需要变更完整需要修改的代码 需求场景以及先决条件 同一环境下的多个ruoyi项目,各自使用相同的一组用户(我这里用的是LDAP的登录,不影响本文),但是每个权限拥…

图像/文字差异类型验证码识别 无需训练

某像差异在个别全家桶验证方便有使用&#xff0c;对于这种验证码类型如下&#xff1a; 首先还是目标检测&#xff0c;直接用 dddd 自带的detection 就足够了。 特征提取 其次经过观察&#xff0c;差异答案与其他三个无非就是颜色&#xff0c;字体&#xff0c;方向&#xff0c…

【AI+教育】一些记录@2024.11.16

《万字长文&#xff0c;探讨关于ChatGPT的五个最核心问题》 万字长文&#xff0c;探讨关于ChatGPT的五个最核心问题关于 ChatGPT 铺天盖地的信息让人无所适从。本文则试图提炼出五个关键问题&#xff1a;如何理解这次范式突破&#xff0c;未来能达到的技术天花板&#xff0c;行…

Java-04 深入浅出 MyBatis - SqlSessionFactory 与 SqlSession DAO与Mapper 代理模式

点一下关注吧&#xff01;&#xff01;&#xff01;非常感谢&#xff01;&#xff01;持续更新&#xff01;&#xff01;&#xff01; 大数据篇正在更新&#xff01;https://blog.csdn.net/w776341482/category_12713819.html 目前已经更新到了&#xff1a; MyBatis&#xff…

在Unity中使用Epplus写Excel

Overview 本文旨在帮助你快速入门,该库发展多年内容庞大(官方文档写的极好:https://github.com/EPPlusSoftware/EPPlus/wiki),有些功能在Unity环境可能你永远都不会使用. 官方的一个Demo: https://github.com/EPPlusSoftware/EPPlus.Samples.CSharp 如果你只有读的需求,可以…

leetcode 删除有序数组的重复项

26. 删除有序数组中的重复项 已解答 简单 相关标签 相关企业 提示 给你一个 非严格递增排列 的数组 nums &#xff0c;请你 原地 删除重复出现的元素&#xff0c;使每个元素 只出现一次 &#xff0c;返回删除后数组的新长度。元素的 相对顺序 应该保持 一致 。然后返回 n…

HNUST-党校培训自动下一集油猴脚本

1.起初 好烦&#xff0c;这个系统看视频需要一直点按键&#xff0c;还没有自动下一集的功能&#xff0c;于是就有了这个js代码 2.效果 实现自动点击是否观看&#xff0c;检测按键自动播放下一集 3.代码(你需要下载油猴&#xff0c;打开管理面板&#xff0c;新建代码) // UserS…

深入了解 GIS 地理信息系统和前端五大 GIS 技术,GIS地理信息系统介绍及前端五大 GIS 技术解析

目录 前言 地理信息系统 (GIS) 是现代数据化社会的重要工具&#xff0c;广泛应用于智慧城市、环境保护、交通管理等领域。随着 Web 前端技术的发展&#xff0c;GIS 可视化在浏览器端的表现能力越来越强&#xff0c;成为许多开发者关注的焦点。这里分享记录 GIS 的基础知识&am…

美团单车上线暖手套,美团贴心服务会给市场带来什么?

首先&#xff0c;美团单车上线暖手套这一举措主要是为了提升市民在秋冬季节骑行共享单车、电单车的出行体验。这一贴心的设计能够解决骑行者在寒冷天气中手部受冻的问题&#xff0c;使得骑行更加舒适和安全。 其次&#xff0c;美团的这一贴心服务会对市场产生积极影响。一方面…

Mysql-DQL语句

文章目录 DQL 语句简单查询查询表所有数据查询指定列 别名查询清除重复值查询结果参与运算 &#x1f3e1;作者主页&#xff1a;点击&#xff01; &#x1f916;Mysql专栏&#xff1a;点击&#xff01; ⏰️创作时间&#xff1a;2024年11月16日11点39分 DQL 语句 DQL 语句数据…

【cpp中的继承】

什么是继承&#xff1f; 继承(inheritance)机制是面向对象程序设计使代码可以复用的最重要的手段&#xff0c;它允许程序员在保持原有类特性的基础上进行扩展&#xff0c;增加功能&#xff0c;这样产生新的类&#xff0c;称派生类。继承呈现了面向对象程序设计的层次结构&…

iOS 18 导航栏插入动画会导致背景短暂变白的解决

问题现象 在最新的 iOS 18 系统中,如果我们执行导航栏的插入动画,可能会造成导航栏背景短暂地变为白色: 如上图所示:我们分别向主视图和 Sheet 弹出视图的导航栏插入了消息,并应用了动画效果。可以看到,前者的导航栏背景会在消息插入那一霎那“变白”,而后者则没有任何…

《Java核心技术 卷I》Collection接口和迭代器

Collection接口 Java类库中&#xff0c;集合类的基本接口是Collection接口&#xff0c;两个基本方法&#xff1a; public interface Collection<E>{boolean add(E element);Iterator<E> iterator();...... } add方法用于向集合中添加元素&#xff0c;如果元素确…

《Python制作动态爱心粒子特效》

一、实现思路 粒子效果&#xff1a; – 使用Pygame模拟粒子运动&#xff0c;粒子会以爱心的轨迹分布并运动。爱心公式&#xff1a; 爱心的数学公式&#xff1a; x16sin 3 (t),y13cos(t)−5cos(2t)−2cos(3t)−cos(4t) 参数 t t 的范围决定爱心形状。 动态效果&#xff1a; 粒子…

109. UE5 GAS RPG 实现检查点的存档功能

在这一篇文章里&#xff0c;我们接着实现存档的功能&#xff0c;保存当前玩家的生成位置&#xff0c;游戏里有很多中方式去实现玩家的位置存储&#xff0c;这里我们采用检查点的方式&#xff0c;当玩家接触到当前检查点后&#xff0c;我们可以通过检查点进行保存玩家的状态&…

浅谈电力行业网络安全与防护

3月7日&#xff0c;委内瑞拉发生迄今为止最大规模停电事件&#xff0c;让这个身处危机之中的国家雪上加霜。千里之堤溃于蚁穴&#xff0c;切莫忽视任何不安全因素的存在。电力基础设施薄弱&#xff0c;设备维护不到位&#xff0c;技术人员水平低下&#xff0c;工业控制系统防护…