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);//错误,中间的参数不能跳过

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

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

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

相关文章

Java中List接口两个实现,ArrayList类和LinkedList类的常用方法(一)

List接口 要了解List接口&#xff0c;就不得不说起Java的集合框架。 &#xff08;该图来自菜鸟教程&#xff09; Collection接口和Map接口 Java 集合框架主要包括两种类型的容器&#xff0c;集合Collection和图Map。 Collection接口代表了单列集合&#xff0c;它包含了一组…

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

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

Mybatis面试题(二)

MyBatis 面试题 11、Mybatis是如何将sql执行结果封装为目标对象并返回的&#xff1f;都有哪些映射形式&#xff1f; 第一种是使用标签&#xff0c;逐一定义数据库列名和对象属性名之间的映射关系。 第二种是使用 sql 列的别名功能&#xff0c;将列的别名书写为对象属性名。 …

.NET架构师:全网最全“权限系统”设计剖析

&#x1f3c6;作者&#xff1a;科技、互联网行业优质创作者 &#x1f3c6;专注领域&#xff1a;.Net技术、软件架构、人工智能、数字化转型、DeveloperSharp、微服务、工业互联网、智能制造 &#x1f3c6;欢迎关注我&#xff08;Net数字智慧化基地&#xff09;&#xff0c;里面…

品鉴威士忌:威士忌酿造发酵,糖类到酒精的转变

威士忌&#xff0c;这一源自苏格兰的特别蒸馏酒&#xff0c;以其丰富的味蕾和特别的风味吸引了无数品鉴者。在威士忌的酿造过程中&#xff0c;发酵是从糖类物质转化为酒精的重要环节。本文将带您深入了解威士忌发酵的过程&#xff0c;以及如何捕捉那些难以言喻的美妙味蕾感受。…

Seaborn可视化的各种图及代码演示

一.简介 Seaborn是基于matplotlib的图形可视化python包。它提供了一种高度交互式界面&#xff0c;便于用户能够做出各种有吸引力的统计图表。 Seaborn是在matplotlib的基础上进行了更高级的API封装&#xff0c;从而使得作图更加容易&#xff0c;在大多数情况下使用seaborn能做…

FFmpeg之AVFilter

文章目录 一、概述二、重要结构体2.1、AVFilterGraph2.2、AVFilter2.3、AVFilterContext 三、流程梳理3.1、FFmpeg AVFilter 使用整体流程3.2、过滤器构建流程3.2.1、分配AVFilterGraph3.2.2、创建过滤器源3.2.3、创建接收过滤器3.2.4、生成源和接收过滤器的输入输出3.2.5、通过…

GMT学习记录

我主要根据GMT中文手册一步一步学习的&#xff01;&#xff01;&#xff01;&#xff01;B站视频介绍的是5.0老版本仅仅建立基础理解这个软件。 好的&#xff0c;学了一点发现直接把gmt转为shp&#xff0c;就得到我想的文件 gmt数据转shape格式数据 - 简书 (jianshu.com) 命…

算法刷题——删除排序链表中的重复元素(力扣)

文章目录 题目描述我的解法思路结果分析 官方题解分析 查漏补缺更新日期参考来源 题目描述 传送门 删除排序链表中的重复元素&#xff1a;给定一个已排序的链表的头 head &#xff0c; 删除所有重复的元素&#xff0c;使每个元素只出现一次 。返回 已排序的链表 。 示例 1&…

细说JavaScript BOM之HTML5新特性

1、applicationCache对象 什么是Application Cache呢&#xff1f;HTML5引入了应用程序缓存技术&#xff0c;意味着Web应用可进行缓存&#xff0c;并在没有网络的情况下使用&#xff0c;通过创建cache manifest文件&#xff0c;可以轻松的创建离线应用。 Application Cache带来…

数字创意市场:Web3时代创作者的新机遇

随着Web3时代的崭露头角&#xff0c;数字创意市场正迎来全新的变革和机遇。在这个数字化的时代&#xff0c;创作者们将面对更加开放、去中心化的创作和交易环境。本文将深入探讨Web3时代数字创意市场为创作者带来的新机遇&#xff0c;以及这个时代为创意产业带来的变革。 创作者…

2024 Move 开发者大会精彩回顾|共赴 Move 生态的无限未来

2024 年的 Move 开发者大会是 Move 生态的一场大型的线下盛事。Move 的优异特性、Move 的高光发展、Move 的未来潜力……无不引领着开发者、投资人等一众业内人士加入建设可持续的 Move 生态世界。 在去中心化、安全性和可扩展性等 Web3 关键议题不断涌现之时&#xff0c;Move …

YOLOv5全网独家首发:DCNv4更快收敛、更高速度、更高性能,效果秒杀DCNv3、DCNv2等 ,助力检测实现暴力涨点

💡💡💡本文独家改进:DCNv4更快收敛、更高速度、更高性能,完美和YOLOv5结合,助力涨点 DCNv4优势:(1) 去除空间聚合中的softmax归一化,以增强其动态性和表达能力;(2) 优化存储器访问以最小化冗余操作以加速。这些改进显著加快了收敛速度,并大幅提高了处理速度,DCN…

python数字图像处理基础(七)——直方图均衡化、傅里叶变换

目录 直方图均衡化均衡化原理均衡化效果标准直方图均衡化自适应直方图均衡化 傅里叶变换原理低通滤波高通滤波 直方图均衡化 均衡化原理 图像均衡化是一种基本的图像处理技术&#xff0c;通过更新图像直方图的像素强度分布来调整图像的全局对比度。这样做可以使低对比度的区域…

新品上市如何做好内容营销?

当新品上市面向用户销售时&#xff0c;其中的关键环节就是内容营销&#xff0c;只要有一套完整的内容营销策略&#xff0c;那在新品上市时就可以取得不错的成绩&#xff0c;今天媒介盒子就来和大家聊聊&#xff1a;新产品上市如何做好内容营销。 一、 结合不同层次需求 1.用…

Mac系统数据占用太多怎么清理 mac怎么清除下载的软件

在我们使用MacBook电脑的过程中&#xff0c;经常会遇到一个常见的问题&#xff0c;那就是储存空间不足。当我们的硬盘空间被占满的时候&#xff0c;系统的运行速度可能会变得缓慢&#xff0c;并且我们无法保存新的文件或者安装新的应用程序。要解决这个问题&#xff0c;清理缓存…

react native Gradle的原国外地址、本地下载、国内阿里腾讯镜像三种下载配置

一、国外地址&#xff1a;&#xff08;初始项目默认&#xff09; 下载地址&#xff1a;https://services.gradle.org/distributions/ 文件地址见下图&#xff1a; 注意&#xff1a;这个地址下载十次就有九次是连接超时&#xff0c;建议换另外两种方法 二、下载到本地&#x…

什么是SFP光学模块?

SFP光模块是一个十亿位电信号到光信号接口设备&#xff0c;是行业标准的小型可插拔千兆光收发器模块&#xff0c;集成可插拔交换机&#xff0c;路由器和其他网络设备&#xff0c;媒体转换器SFP端口&#xff0c;用于连接到光或铜线数据传输网络&#xff0c;我们通常可以在以太网…

什么是关键字?C语言的关键字有哪些?

目录 一、问题 二、解答 1、数据类型关键字&#xff08;12个&#xff09; (1) 声明和定义的区别 (2) 数据类型关键字 • char&#xff1a;声明字符型变量 1、声明字符变量 2、字符数组 3、ASCII码表示 4、指针与字符数组 5、多字节字符集&#xff08;如UTF-8&#xff…

Flask 与 小程序 加入购物车功能

构建数据库 common/models/member/MemberCart.py DROP TABLE IF EXISTS member_cart;CREATE TABLE member_cart (id int(11) unsigned NOT NULL AUTO_INCREMENT,member_id bigint(20) NOT NULL DEFAULT 0 COMMENT 会员id,food_id int(11) NOT NULL DEFAULT 0 COMMENT 商品id,q…