C++入门——C++中的缺省参数


前言

缺省参数是声明或定义函数时为函数的参数指定⼀个缺省值。在调⽤该函数时,如果没有指定实参则采⽤该形参的缺省值,否则使⽤指定的实参,缺省参数分为全缺省和半缺省参数。(缺省参数也叫默认参数)。

如下面函数中的a = 0:

#include<iostream>

using namespace std;

void Func(int a = 0)
{
	cout << a << endl;
}

int main()
{
	Func();    // 没有传参时,使⽤参数的默认值
	Func(10);  // 传参时,使⽤指定的实参
	return 0;
}

一、全缺省

全缺省就是全部形参给缺省值。如果调用函数时给定值,就用给定值。否则就用缺省值。
如下边的代码,给的abc的值时打印abc的值,没给定时打印缺省值:

#include<iostream>

using namespace std;

void Func1(int a = 10, int b = 20, int c = 30)
{
	cout << "a = " << a << endl;
	cout << "b = " << b << endl;
	cout << "c = " << c << endl << endl;
}

int main()
{
	Func1();        //没有传参时,使⽤参数的默认值
	Func1(1);       //只给定第一个值时,其余参数用默认值
	Func1(1, 2);
	Func1(1, 2, 3); //全部使用指定参数
	return 0;
}

结果如下:
在这里插入图片描述
不支持下面的操作:

Func1( , 2,  ,);

二、半缺省

半缺省就是部分形参给缺省值。C++规定半缺省参数必须从右往左依次连续缺省,不能间隔跳跃给缺省值。

代码如下(示例):

void Func2(int a, int b = 10, int c = 20)//缺省值只能从右往左给
{
cout << "a = " << a << endl;
cout << "b = " << b << endl;
cout << "c = " << c << endl << endl;
}

下面这种就是错误的给法:

void Func2(int a = 10, int b, int c = 20)//缺省值只能从右往左给
{
cout << "a = " << a << endl;
cout << "b = " << b << endl;
cout << "c = " << c << endl << endl;
}
  • 半缺省与全缺省的区别就是半缺省至少要传一个。

三、缺省参数的应用

我们在设计栈的时候可以用到缺省参数

在头文件stack.h中声明栈和栈的初始化函数:

//stack.h
#include<iostream>
#include<assert.h>
using namespace std;
typedef int SDataType;
typedef struct stack
{
	SDataType* data;
	int top;
	int capacity;
}ST;
void STInit(ST* ps, int n = 4);//可以使用缺省参数

在stack.cpp中定义初始化函数的操作

//stack.cpp
#include"stack.h"
// 缺省参数不能声明和定义同时给
void STInit(ST* ps, int n)
{
	asssert(ps);
	ps->data = (SDataType*)malloc(n*sizeof(SDataType));
	ps->capacity = n;
	ps->top = 0;
}

在test.cpp中调用初始化函数:

//test.cpp
#include"stack.h"
int main()
{
	ST s1;
	STInit(&s1);//不传开辟空间的大小,n默认使用缺省值4
	
	// 确定知道要插⼊1000个数据,初始化时⼀把开好,避免扩容
	ST s2;
	STInit(&s2,1000);
	return 0;
}

总结

  • C++规定半缺省参数必须从右往左依次连续缺省,不能间隔跳跃给缺省值。
  • 带缺省参数的函数调⽤,C++规定必须从左到右依次给实参,不能跳跃给实参。
  • 函数声明和定义分离时,缺省参数不能在函数声明和定义中同时出现,规定必须函数声明给缺省值。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值