文章目录
- 缺省参数的概念
- 缺省参数的分类
- 1、全缺省参数
- 2、半缺省参数
- 缺省参数实际应用场景
缺省参数的概念
缺省参数是声明或定义函数时为函数的参数指定一个缺省值。在调用该函数时,如果没有指定实参则采用该形参的缺省值,否则使用指定的实参
正常调用一个函数
//正常调用一个函数,实参传递给形参
void func(int i)
{
cout << i << endl;
}
int main()
{
func(1);
func(2);
func(3);
}
加入缺省参数
缺省参数就相对一个备胎,实参没传值过来,那么形参就用缺省参数给的值
打印结果:
void func(int i = 0)
{
cout << i << endl;
}
int main()
{
func(1);
func(2);
func();
}
缺省参数的分类
1、全缺省参数
//全缺省参数
void func(int a = 10,int b =20,int c = 30)
{
cout << a << endl;
cout << b << endl;
cout << c << endl;
}
int main()
{
func();
cout << endl;
func(1);
cout << endl;
func(1,2);
cout << endl;
func(1, 2, 3);
cout << endl;
return 0;
}
打印结果:
注意:千万不能这样写,这是c++语法不支持的
2、半缺省参数
//半缺省参数
void func(int a, int b = 20, int c = 30)
{
cout << a << endl;
cout << b << endl;
cout << c << endl;
}
int main()
{
cout << endl;
func(1);
cout << endl;
func(1, 2);
cout << endl;
func(1, 2, 3);
cout << endl;
return 0;
}
打印结果
注意:必须从左往右连续缺省
千万不能这样
缺省参数实际应用场景
举一个例子,利用 缺省参数 实现数据结构中的 栈(Stack) 初始化
之前用C语言来实现这个初始化是这样的
struct Stack
{
int* a;
int top;//栈顶
int capacity;//栈的容量
};
void StackInit(struct Stack* ps)
{
ps->a = NULL;
//pst->top = -1; // top 指向栈顶数据
ps->top = 0; // top 指向栈顶数据的下一个位置
ps->capacity = 0;
}
这里的capacity(容量) 就直接初始化为0了,因为在之前栈实现是动态开辟容量空间的,当一个元素入栈,就会先检查空间是否足够,如果不够就再来增加容量,这种情况是当你不知道要入多少元素到栈里面去,你只能每次入栈前就先检查一下容量是否足够,如果不够往往容量空间是成倍数的增加的,当你不在需要入元素进栈就会产生一定的空间浪费
现在这种利用缺省参数的形式,在你确认需要入多少个元素的情况下直接把capacity定义为缺省参数,例如下面的方式:
struct Stack
{
int* a;
int top;//栈顶
int capacity;//栈的容量
};
void StackInit(struct Stack* ps, int capacity = 4)
{
ps->a = (int*)malloc(sizeof(int) * capacity);
ps->top = 0;
ps->capacity = capacity;
}
int main()
{
struct Stack st;
StackInit(&st, 100);
}
现在知道一定会插入100个数据,就可以显示传参数100,提前开好空间,避免空间扩容这个步骤,减少空间的浪费