C++ 编程中的默认参数
提示
- 默认参数的概念:在C++编程中,可以为函数参数提供默认值。如果在调用函数时没有传递参数,则使用默认参数。
- 默认参数的工作原理:当使用默认参数的函数被调用时,如果没有传递相应的参数,就会使用其默认值;如果传递了参数,则默认参数被覆盖。
- 默认参数使用注意事项:一旦为某个参数提供了默认值,其后的所有参数也必须有默认值。如果在函数定义中指定默认参数,那么函数定义必须在函数调用之前。
在 C++ 编程中,我们可以为函数参数提供默认值。
如果带有默认参数的函数在调用时没有传递参数,则使用默认参数。
然而,如果在调用函数时传递了参数,则默认参数被忽略。
默认参数的工作原理
我们可以从上图中理解默认参数的工作原理:
-
当调用
temp()
时,函数使用两个默认参数。 -
当调用
temp(6)
时,第一个参数变为6
,第二个参数使用默认值。 -
当调用
temp(6, -2.3)
时,两个默认参数被覆盖,得到i = 6
和f = -2.3
。 -
当传递
temp(3.4)
时,函数 的行为是不可预期的,因为不能在不传递第一个参数的情况下传递第二个参数。因此,
3.4
被作为第一个参数传递。由于第一个参数被定义为int
,实际传递的值是3
。
示例:默认参数
#include <iostream>
using namespace std;
// 定义默认参数
void display(char = '*', int = 3);
int main() {
int count = 5;
cout << "没有传递参数: ";
// *, 3 将作为参数
display();
cout << "传递了第一个参数: ";
// #, 3 将作为参数
display('#');
cout << "两个参数都传递了: ";
// $, 5 将作为参数
display('$', count);
return 0;
}
void display(char c, int count) {
for(int i = 1; i <= count; ++i)
{
cout << c;
}
cout << endl;
}
输出
没有传递参数: ***
传递了第一个参数: ###
两个参数都传递了: $$$$$
这个程序的工作原理如下:
- 调用
display()
时没有传递任何参数。在这种情况下,display()
使用两个默认参数c = '*'
和n = 1
。 - 调用
display('#')
时只传递了一个参数。在这种情况下,第一个参数变为'#'
。第二个默认参数n = 1
保留。 - 调用
display('#', count)
时传递了两个参数。在这种情况下,不使用默认参数。
我们也可以在函数定义中直接定义默认参数。下面的程序与上面的程序等效。
#include <iostream>
using namespace std;
// 定义默认参数
void display(char c = '*', int count = 3) {
for(int i = 1; i <= count; ++i) {
cout << c;
}
cout << endl;
}
int main() {
int count = 5;
cout << "没有传递参数: ";
// *, 3 将作为参数
display();
cout << "传递了第一个参数: ";
// #, 3 将作为参数
display('#');
cout << "两个参数都传递了: ";
// $, 5 将作为参数
display('$', count);
return 0;
}
需要记住的事项
- 一旦我们为参数提供了默认值,随后的所有参数也必须有默认值。例如,
// 无效
void add(int a, int b = 3, int c, int d);
// 无效
void add(int a, int b = 3, int c, int d = 4);
// 有效
void add(int a, int c, int b = 3, int d = 4);
- 如果我们在函数定义中定义默认参数而不是在函数原型中,则必须在函数调用之前定义该函数。
// 无效代码
int main() {
// 函数调用
display();
}
void display(char c = '*', int count = 5) {
// 代码
}