C++入门篇(三) 缺省参数

目录

一、概念

二、全缺省参数和半缺省参数

三、函数声明和定义分离时的缺省参数

四、缺省参数的使用

五、总结 

六、源代码 

1.Test.h

2.Test.cpp

3.缺省参数.cpp


一、概念

1.什么是缺省参数?

        缺省参数就是在定义函数时给的参数设置默认值,如果调用函数时未传入参数就使用这个默认值。


2.为什么引入缺省参数?

        方便给函数参数设置默认值。调用函数的代价更小。


3.怎么使用?

        在定义函数时从右往左设置缺省参数,中间不能有间隔。
        调用函数时,从左往右传入参数,中间也不能有间隔。


二、全缺省参数和半缺省参数

1.全缺省参数:(所有参数都设置了缺省值)

void funa(int a = 0, int b = 1, int c = 2)
{
	cout << a << ' ' << b << ' ' << c << endl;
}

2.半缺省参数:(部分参数都设置了缺省值) 

·半缺省只能从右往左连续设置缺省,中间不能有间隔。

void funb(int a  , int b = 1, int c = 2)//必须从右往左(<--)连续缺省,不能有间隔
{
	cout << a << ' ' << b << ' ' << c << endl;
}

eg. 从左往右设置缺省,会报错:


三、函数声明和定义分离时的缺省参数

1. 函数声明和函数定义分离时不能同时设置缺省参数:


2. 缺省参数以函数声明为准,函数定义中的缺省参数无效:

  (声明中没有缺省参数,定义给了也没用。)


综上所述:缺省参数以声明为准。


四、缺省参数的使用

1. 半缺省只能从右往左连续设置缺省,中间不能有间隔。


2. 即使设置了缺省值,在传参时,我们依旧只能从左往右逐个传,中间不能有间隔。
(C++在调用函数时不支持func(a, , )和func( ,b, )这样的写法,即便设置了缺省参数也一样。)


3. 缺省参数以函数声明为准 。

要注意的是:

1. 缺省值必须是常量或全局变量。

2. C语言不支持缺省参数。

3. C++在调用函数时不支持Func(a, , )和Func( ,b, )这两种写法。即便设置了缺省参数也一样。

缺省参数的使用场景:顺序表,栈,队列的初始化

在这里使用缺省参数的好处是:
1.在知道容量的情况下可以传参给capacity指定容量,无需反复扩容浪费时间。
2.不传参就使用缺省参数,后续扩容就无需考虑capacity==0无法直接乘的问题。


五、总结 


六、源代码 

1.Test.h

#include<iostream>
using std::cin;
using std::cout;
using std::endl;
void func(int a = 0, int b = 1, int c = 2);

2.Test.cpp

#include"Test.h"
void func(int a, int b, int c)
{
	cout << a << ' ' << b << ' ' << c << endl;
}

3.缺省参数.cpp

#include<iostream>
#include "Test.h"
using std::cin;
using std::cout;
using std::endl;

//全缺省
void funa(int a = 0, int b = 1, int c = 2)
{
	cout << a << ' ' << b << ' ' << c << endl;
}
//半缺省
//void funb(int a = 0, int b = 1, int c)//错,设置缺省参数时只能从右往左设置
void funb(int a  , int b = 1, int c = 2)//必须从右往左(<--)连续缺省,不能有间隔
{
	cout << a << ' ' << b << ' ' << c << endl;
}

int main()
{
	int a = 1;
	funa(a);
	//funa(, b, );//错,传参时只能从左往右逐个传
	//funa(a, , );//错,C++不支持这种写法
	funb(a);
	func();

	return 0;
}

//缺省参数不能在声明和定义中同时出现。(担心出现声明和定义中缺省值不同的情况)
//缺省实参以声明为准(声明中没给缺省,定义中给了也没用)

//关键:
//1.半缺省只能从右往左连续设置缺省,中间不能有间隔
//2.在传参时,我们只能只能从左往右逐个传,中间不能有间隔
//3.缺省实参以声明为准

------------------------END-------------------------

才疏学浅,谬误难免,欢迎各位批评指正。

  • 5
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

烛火萤辉

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值