C++--默认参数


一.默认参数🍗

C++中允许函数提供默认参数,也就是允许在函数的声明或定义时给⼀个或多个参数指定默认值。在调 ⽤具有默认参数的函数时,如果没有提供实际参数,C++将⾃动把默认参数作为相应参数的值。


二.使用规则🍗

1.如果上⾯有函数声明,下⾯写函数定义。则只能在声明时写默认参数,定义时不能写
2.如果上⾯没有函数声明,只有函数定义,则函数定义时写默认参数
3.参数必须从右往左添加默认值。

三.例子🍗

以下以获取一个字符串的左边第一个字符为例子。
注:这个算法思路也比较简单:创建一个动态数组,然后取下标为0的首字母
情况一:函数声明时写默认参数 , 则定义时不能写
//默认参数
char* left(const char* str, int n = 1);//函数声明时写默认参数,定义时不能写int main()
{char str[100];cin >> str;char* p1 = left(str);cout << p1 << endl;delete[]p1;//创建的是数组,释放也是数组char* p2 = left(str,5);cout << p2 << endl;delete[]p2;return 0;
}//char* left(const char* str, int n = 1)//错误,如果函数声明已经有默认参数,则定义时不能写默认参数
char* left(const char* str, int n )//正确
{if (n < 0) //没有保留的字符n = 0;char* p = new char[n + 1] {'\0'};//动态创建新的内存保存新字符串int i;for (i = 0; i < n && str[i] != '\0'; ++i)p[i] = str[i];p[i] = '\0';return p;
}

情况二:没有函数声明,定义时直接写默认参数

//默认参数
char* left(const char* str, int n = 1)//没有函数声明,定义时直接写默认参数
{if (n < 0) //没有保留的字符n = 0;char* p = new char[n+1] {'\0'};//动态创建新的内存保存新字符串int i;for (i = 0; i < n && str[i] != '\0'; ++i)p[i] = str[i];p[i] = '\0';return p;
}int main()
{char str[100];cin >> str;char* p1 = left(str);cout << p1 << endl;delete[]p1;//创建的是数组,释放也是数组char* p2 = left(str,5);cout << p2 << endl;delete[]p2;return 0;
}

注意事项:

1/参数必须从右往左添加默认值。例如;

int fun1(int x,int y=4,int z=5);//合法
int fun2(int x,int y=6,int z);//非法,z没有默认值,而y有
int fun3(int x=1,int y=2,int z=3);//合法

2.实参按从左到右的顺序依次赋值给形参,不能跳过。在调用fun1()函数时可以提供1个,2个,3个参

int a = fun1(10);//合法,x=10,y=4,z=5.
int b = fun1(1,8);//合法,x=1,y=8,z=5.
int c = fun1(8,7,6);//合法,x=8,y=7,z=6
int d = fun1(3, ,8);//错误,中间的参数不能跳过

创作不易,如果喜欢的话,请给博主一个免费的赞以表支持吧!🍗

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

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

相关文章

Halcon基于形状的模板匹配

Halcon基于形状的模板匹配 基于形状的模板匹配&#xff0c;也称为基于边缘方向梯度的匹配&#xff0c;是一种最常用也最前沿的模板匹配算法。该算法以物体边缘的梯度相关性作为匹配标准&#xff0c;原理是提取ROI中的边缘特征&#xff0c;结合灰度信息创建模板&#xff0c;并根…

Linux之引导和服务篇

系统引导是操作系统运行的开始&#xff0c;在用户能够正常登录之前&#xff0c;Linux的引导过程完成了一系列的初始化任务&#xff0c;并加载必要的程序和命令终端&#xff0c;为用户登录做好准备。 一. 引导过程 开机自检--->MBR引导--->GRUB菜单--->加载Linux内核-…

【动态规划】【离线查询】【前缀和】689. 三个无重叠子数组的最大和

作者推荐 【动态规划】【数学】【C算法】18赛车 本文涉及的基础知识点 动态规划 滚动向量 离线查询 C算法&#xff1a;前缀和、前缀乘积、前缀异或的原理、源码及测试用例 包括课程视频 LeetCode689. 三个无重叠子数组的最大和 给你一个整数数组 nums 和一个整数 k &…

ELK之Filebeat安装配置及日志抓取

一、Filebeat是什么 轻量型日志采集器 无论您是从安全设备、云、容器、主机还是 OT 进行数据收集,Filebeat 都将为您提供一种轻量型方法,用于转发和汇总日志与文件,让简单的事情不再繁杂。 Filebeat 随附可观测性和安全数据源模块,这些模块简化了常见格式的日志的收集、解…

【LeetCode】876. 链表的中间结点

leetcode链接 876. 链表的中间结点 struct ListNode {int val;struct ListNode* next; }; typedef struct ListNode ListNode;ListNode* MiddleNode(ListNode* head) {ListNode* slow head,* quick head;while (quick && quick->next) {slow slow->next;qui…

Postman使用方法指南,最全面的教程

Postman使用教程 一、Postman介绍 ​ Postman是一个英语单词&#xff0c;名词&#xff0c;作名词时意为“邮递员&#xff1b;邮差”。 ​ Postman是一个接口测试工具,在做接口测试的时候,Postman相当于一个客户端,它可以模拟用户发起的各类HTTP请求,将请求数据发送至服务端,获…

代码随想录算法训练营Day23 | 455.分发饼干、376.摆动子序列、53.最大子数组和

LeetCode 455 分发饼干 本题思路&#xff1a;分发饼干的时候&#xff0c;外层循环是胃口&#xff0c;内层是饼干&#xff0c;按照大饼干满足大胃口的思维来投递饼干。 需要将 两个数组&#xff0c;一开始就进行排序处理。 class Solution {public int findContentChildren(int…

EasyX图形化学习(三)

1.帧率&#xff1a; 即每秒钟界面刷新次数&#xff0c;下面以60帧为例&#xff1a; 1.数据类型 clock_t&#xff1a; 用来保存时间的数据类型。 2.clock( ) 函数&#xff1a; 用于返回程序运行的时间,无需参数。 3.例子&#xff1a; 先定义所需帧率&#xff1a; const …

[NSSCTF Round#16 Basic]RCE但是没有完全RCE

RCE但是没有完全RCE wp 题目代码&#xff1a; 第一关 <?php error_reporting(0); highlight_file(__file__); include(level2.php); if (isset($_GET[md5_1]) && isset($_GET[md5_2])) {if ((string)$_GET[md5_1] ! (string)$_GET[md5_2] && md5($_GET[m…

Leetcode:128. 最长连续序列

128. 最长连续序列 乍一看感觉很简单&#xff0c;一看要用O(n)??? 因为我觉得题目很难而且题目看起来很简单&#xff0c;感觉以后会用到&#x1f606;&#xff0c;做个记录 1.朴素做法 思路 答:任何一段连续的数都有一个左端点&#xff1a;比如&#xff08;1&#xff0c;…

解读Vue的原型及原型链

在 JavaScript 中&#xff0c;每个对象都有一个关联的原型&#xff08;prototype&#xff09;。原型是一个对象&#xff0c;其他对象可以通过原型实现属性和方法的继承。原型链是一种由对象组成的链式结构&#xff0c;它通过原型的引用连接了一系列对象&#xff0c;形成了一种继…

恭喜所有纺织人,你最想要的小程序来了

随着互联网的普及和电子商务的快速发展&#xff0c;越来越多的商家开始涉足线上销售。而小程序商城作为一种轻量级的应用程序&#xff0c;正逐渐成为商家们热衷选择的销售平台。本文将通过实用指南的形式&#xff0c;为商家们详细介绍如何通过乔拓云网后台&#xff0c;自助搭建…