文章目录
- 缺省参数的概念
- 缺省参数的分类
- 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,提前开好空间,避免空间扩容这个步骤,减少空间的浪费