文章目录
1、用法
2、使用规则
3、注意事项
前言
有一些参数的值在每次调用时都相同,书写这样的语句会使人厌烦。C++语言采用的缺省值使书写变得整洁(在编译时,缺省值由编译器自动插入)
用法
- 在参数内添加默认值。在调用该函数时,如果没有指定实参则采用该默认值,否则使用指定的实参。
- 如下所示,在set()函数的参数内添加默认值,就可以替代public内四个set函数
public: void Set(int h=12;int m=30;int s=20;) { m_hour=h; m_minute=m; m_second=s; } /*class Clock { public: void Set() { this->m_hour=12;//m_ :成员 this->m_minute=20; this->m_second=30; } void Set(int h) { this->m_hour=h; this->m_minute=20; this->m_second=30; } void Set(int h,int m) { this->m_hour=h; this->m_minute=m; this->m_second=30; } void Set(int h,int m,int s) { this->m_hour=h;//m_ :成员 this->m_minute=m; this->m_second=s; } */
使用规则
1.参数的缺省值只能出现在函数的声明中,而不能出现在定义体中。
例如:
void Foo(int x=0,iny y=0);//正确,缺省值出现在函数的声明中 void Foo(int x=0,int y=0)//错误,缺省值出现在函数的定义体中 { ... }
2.如果函数有多个参数,参数只能从后向前挨个儿缺省。也就是说在一般情况下,尽量参数都带默认值,如果参数不带默认值,必须放在前面,有默认值的参数后面的参数必须都带默认值。
例:
voif Foo(int x,int y=0,int z=1);//错误 void Foo(int x=0,int y=1,int z);//正确
3.默认参数在函数声明的时候写上,如果放在类外定义此函数,默认值不需要再定义。
- 如下面这样书写就是错误的:
class A { public: void fn(int i=0;int j=0;int k=0);//声明 }; void AA:fn(int i=0;int j=0;int k=0) { m_i=i; m_j=j; m_k=k; }
注意事项
要使用函数的缺省值,并没有赋予函数新的功能,而仅仅是使书写变得简洁一点。他可能会提高函数的易用性,但是也可能会降低函数的可理解性。
不合理的使用参数的缺省值将会导致重载函数产生二义性
如:
void output(int x) { } void output(int x,int y) { } int main() { int x=1,y=2; //output(x); error output(x,y); }