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.rhkb.cn/news/241382.html

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

相关文章

Spring Web文件上传功能简述

文章目录 正文简单文件上传文件写入 总结 正文 在日常项目开发过程中&#xff0c;文件上传是一个非常常见的功能&#xff0c;当然正规项目都有专门的文件服务器保存上传的文件&#xff0c;实际只需要保存文件路径链接到数据库中即可&#xff0c;但在小型项目中可能没有专门的文…

Spring中动态注册和销毁对象

1. 使用说明 通常我们项目中想要往spring容器中注入一个bean可以在项目初始化的时候结合Bean注解实现。但是该方法适合项目初始化时候使用&#xff0c;如果后续想要继续注入对象则无可奈何。本文主要描述一种在后续往spring容器注入bean的方法。 2. 实现 2.1 说明 2.1.1 注册…

「 典型安全漏洞系列 」03.跨站请求伪造CSRF详解

引言&#xff1a;CSRF&#xff08;Cross-Site Request Forgery&#xff0c;跨站请求伪造&#xff09;是一种攻击技术&#xff0c;通过使用用户的身份进行不诚实地操作&#xff0c;恶意用户可以在受害者&#xff08;目标&#xff09;的机器上执行一些未授权的操作。这可能会危及…

FairyGUI Day 1 导入FairyGUI

FairyGUI Unity3d引擎版本&#xff1a;Uinty3d 20233.2.3f1 1、从资产商店中将FairyGUI购入我的资产中&#xff0c;目前是免费的。 2、从我的资产中将FairyGUI导入到当前项目中。 3、我遇到的问题&#xff0c;我的Assets下有两个文件夹分别是Resources和Scenes&#xff0c;导…

进阶Docker4:网桥模式、主机模式与自定义网络

目录 网络相关 子网掩码 网关 规则 docke网络配置 bridge模式 host模式 创建自定义网络(自定义IP) 网络相关 IP 子网掩码 网关 DNS 端口号 子网掩码 互联网是由许多小型网络构成的&#xff0c;每个网络上都有许多主机&#xff0c;这样便构成了一个有层次的结构。 IP 地…

pytest + allure(windows)安装

背景 软硬件环境&#xff1a; windows11&#xff0c;已安装anaconda&#xff0c;python&#xff0c;pycharm用途&#xff1a;使用pytest allure 生成报告allure 依赖java&#xff0c;点击查看java安装教程 allure 下载与安装 从 allure下载网址下载最新版本.zip文件 放在自…

Android Dialog setCanceledOnTouchOutside失效,点击dialog外面不消失

前言&#xff1a;有一个需求需要点击dialog外面要消失&#xff0c;本来以为很简单结果设置了一直未生效 setCanceledOnTouchOutside(true); 问了半天chat-gpt4结果给的答案都不明显 查看代码发现设置了style&#xff0c;于是尝试去除这个style&#xff0c;结果点击setCancele…

蓝桥杯回文日期判断

思想&#xff1a;对于回文数的判断方法&#xff0c;最快的就是取其中一半的字符串长度&#xff0c;为s&#xff0c;然后将其进行翻转为s’ &#xff0c;再把两者进行拼接即可保证是回文数&#xff0c;这样子就解决了枚举所有回文数的问题。 注意点&#xff1a; 要求必须是有效…

SQL Server中数据表的增删查改

文章目录 一、增二、查三、改四、删除 一、增 进行增删查改的前提需要在指定数据库中创建数据表&#xff0c;对这块不大理解的可以先看看前面几期文章&#xff1a; 创建数据库 创建数据表 use StudentManageDB go insert into Students (StudentName,Gender,Birthday,Age,Stu…

如何使用万能头 #include<bits/stdc++.h>

准备蓝桥杯的时候看到了很多头文件包含了这个头文件&#xff0c;后来查了一下 它是C中支持的一个几乎万能的头文件&#xff0c;几乎包含所有的可用到的C库函数。以后写代码就可以直接引用这一个头文件了&#xff0c;不需要在写一大堆vector、string、map、stack…… 我们该如何…

JavaScript基础语法

速通回顾一遍 引入方式 一般会把<script>标签置于<body>元素底部&#xff0c;改善显示速度&#xff1a; 内部脚本&#xff1a;<script></script>标签内外部脚本&#xff1a;<script src""></script>配置src 外部js文件中&…

数据库-数据库分类

数据库可以分为关系型数据库和非关系型数据库&#xff0c;常见的数据库如下 关系型数据库 关系型数据库是一种采用关系模型来组织数据的数据库&#xff0c;它以行和列的形式存储数据&#xff0c;以便于用户理解。关系型数据库中的数据以二维表的形式组织&#xff0c;被称为表…

MSSQL-识别扩展extended event(扩展事件)中的时间单位

经常使用sqlserver extended event(扩展事件)&#xff0c;但是总是忘记扩展事件使用的时间单位&#xff0c;不确定它们是 秒、毫秒、还是微秒&#xff1f; 以下下代码能够从 相关DMV中提取description字段内容来识别时间单位&#xff1a; SELECT [p].[name] [package_name],[o…

mac PyCharm 上传文件到远程服务器+远程服务器下载到本地

1 部署配置 选择SFTP name&#xff1a;test6 输入ssh账号和密码。保存密码和30s心跳。 2 目录映射 Local path&#xff08;本地mac机器&#xff09;&#xff1a;/Users/clevercode/PycharmProjects/test6 Root path&#xff08;远程服务机器&#xff09;&#xff1a;/home/…

k8s---ingress对外服务(traefik)

目录 ingress的证书访问 traefik traefik的部署方式&#xff1a; deamonset deployment nginx-ingress与traefix-ingress相比较 nginx-ingress-controller ui访问 deployment部署 ingress的证书访问 ingress实现https代理访问: 需要证书和密钥 创建证书 密钥 secre…

汽车科技迎来新纪元!奔驰、宝马、谷歌、亚马逊、高通的下一代布局!

不久的将来&#xff0c;你将能够直接通过汽车支付。为了减少支付服务的复杂性&#xff0c;高通正在与摩根大通合作设计一款车载钱包&#xff0c;简化支付体验。这将使驾驶员能够直接通过汽车支付流媒体内容、电动车充电、停车或得来速餐食物。 下一代智能车会是什么样子&#…

KubeSphere平台使用

KubeSphere官网地址&#xff1a;https://kubesphere.io/zh/ KubeKey一键部署K8S集群&#xff1a;https://kubesphere.io/zh/docs/v3.4/installing-on-linux/introduction/multioverview/ 一台master node&#xff08;初始化主节点&#xff09;、两台 work node&#xff08; joi…

【分布式监控】zabbix与grafana连接

1.在zabbix- server服务端安装grafana&#xff0c;并启动服务 先在官网下载软件 https://grafana.com/grafana/download/9.4.7?editionenterprise&pggraf&plcmtdeploy-box-1#可以翻译成中文介绍&#xff0c;很详细的教程 yum install -y https://dl.grafana.com/ent…

Git 基本命令与操作流

记录 Git 中的基本命令和创建仓库、提交文件、删除文件等方面的操作 Git 基本命令 git status&#xff1a;查看状态 nothing to commit, working directory clean&#xff1a;所有已跟踪文件在上次提交后都未被更改过&#xff0c;或者说当前目录下没有出现任何处于未跟踪状态…

Python GUI 新手入门教程:轻松构建图形用户界面

Python 凭借其简单性和多功能性&#xff0c;已经成为最流行的编程语言之一。被广泛应用于从 web 开发到数据科学的各个领域。 在本教程中&#xff0c;我们将探索用于创建图形用户界面&#xff08;GUIs&#xff09;的 Python 内置库&#xff1a; Tkinter&#xff1a;无论你是初…