第17章:C++ 函数缺省参数
在此篇教程中,我们将通过示例程序来学习 C++ 函数之默认参数(又叫缺省参数)及其工作。
在 C++ 编程中,我们可以为函数参数提供默认值。
如果在不传递参数的情况下调用具有默认参数的函数,则使用默认参数。
但是,如果在调用函数时传递参数,则会忽略默认参数。
函数|默认参数工作过程
默认参数如何在 C++ 中工作
显然,从上图中可以理解默认参数的工作方式:
- 调用
temp()
时,函数使用两个默认参数。 - 调用
temp(6)
时,第一个参数变为6
,而第二个参数使用默认值。 - 当调用
temp(8, -8.8)
时,两个默认参数都被覆盖,导致i = 8
和f = -8.8
。 -
当调用 temp(1.88)
时,该函数则会以一种错误的方式运行,因为不传递第一个参数就无法传递第二个参数。因此,1.88
作为第一个参数传递。由于第一个参数已定义为int
,因此实际传递的值为1
。
示例:函数之默认参数
#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 = '*'
和count = 3
。display('#')
只用一个参数调用。在这种情况下,第一个变为'#'
。保留第二个默认参数count = 3
。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);
- 如果我们在函数定义而不是函数原型中定义默认参数,那么函数必须在函数调用之前定义。
// 非法代码:display()函数未声明 int main() { // 函数调用 display(); } void display(char c = '*', int count = 5) { // 代码 }
程序算法实验室 zhangJA-Lab
转载请注明:XAMPP中文组官网 » 那些年C++ 函数之缺省参数