默认的参数是一个函数的参数有一个提供给它的默认值。如果用户不提供此参数的值,将使用缺省值。如果用户提供的默认参数值,使用用户提供的价值。
考虑下面的程序:
1
2
3
4
5
6
7
8
9
10
11
12
|
void
PrintValues(
int
nValue1,
int
nValue2=10)
{
using
namespace
std;
cout <<
"1st value: "
<< nValue1 << endl;
cout <<
"2nd value: "
<< nValue2 << endl;
}
int
main()
{
PrintValues(1);
// nValue2 will use default parameter of 10
PrintValues(3, 4);
// override default value for nValue2
}
|
该程序产生的输出如下:
第一值:1
第二值:10
第一值:3
第二值:4
在第一个函数调用,调用者不供应nvalue2争吵,所以函数使用默认值10。在第二次调用,调用者并供应nvalue2值,所以用户提供的值进行。
默认的参数是一个很好的选择,当函数需要一个值,用户可能会或可能不会想重写。例如,这里有几个函数原型的默认参数可能是常用的:
1
2
3
|
void
OpenLogFile(
char
*strFilename=
"default.log"
);
int
RollDie(
int
nSides=6);
void
PrintString(
char
*strValue, Color eColor=COLOR_BLACK);
// Color is an enum
|
1
2
3
4
5
|
void
PrintValues(
int
nValue1=10,
int
nValue2=20,
int
nValue3=30)
{
using
namespace
std;
cout <<
"Values: "
<< nValue1 <<
" "
<< nValue2 <<
" "
<< nValue3 << endl;
}
|
1
2
3
4
|
PrintValues(1, 2, 3);
PrintValues(1, 2);
PrintValues(1);
PrintValues();
|
将产生以下输出:
价值观:1 2 3
价值观:1 2 30
价值观:1 20 30
价值观:10 20 30
请注意,这是不可能也没有提供nvalue1和nvalue2提供的价值为nvalue3用户定义的值。这是因为C++不支持函数调用如printvalues(,,3)。这有两个主要的后果:
1)所有默认的参数必须是最右边的参数。以下是不允许的:
1
|
void
PrintValue(
int
nValue1=10,
int
nValue2);
// not allowed
|
2)最左边的默认参数应该是一个最有可能被用户更改。
默认参数和函数重载
带缺省参数的函数可以被重载。例如,下面的是允许的: