什么东东?
一般情况下,在函数调用时形参从实参那里取得值,因此实参的个数应与形参相同。
当用同样的实参多次调用同一函数时,C++提供了简单的处理方法,给形参一个默认值,这样形参就不一定要从实参取值了。
怎么用嘞?
1、定义
float area(float r = 2);
2、调用
(1)如果确认b的值为2,调用则可以不必给出实参的值。如
area () ;//相当于area(2);
(2)如果不想使形参取此默认值,则通过实参另行给出。如
area(3);//形参得到的值为3
3、多参数情况
如果有多个形参,可以使每个形参有一个默认值,也可以只对一部分形参指定默认值,另一部分不指定默认值。如
float volume(float h,float r = 3);
函数调用时
volume(5);//相当于volume(5,3);
volume (6,7);//h的值为6,r的值为7;
注意呦!
1、结合顺序
实参与形参的结合顺序时从左至右顺序进行的。
第一个实参与第一个形参结合,第二个实参与第二个形参结合…
因此指定默认值的参数必须放在形参列表的最右端,否则出错。
如
void f1(float a , int b= 0 , int c , char d = 'a');//不正确
void f2(float a , int c,int b = 0 , char d = 'a');//正确
调用
f2(3.5 , 5 , 3 , ‘x’);//形参的值全部从实参得到
f2(3.5 , 5 , 3);//最后一个形参的值取默认值’a’
f2(3.5 , 5);//最后两个形参的值取默认值,b = 0,d = ‘a’
2、函数的声明与定义
(1)如果函数的定义在调用之前,则应在函数定义中给出默认值。
(2)如果函数的定义在调用之后,则在函数调用之前需要有函数声明,此时必须在函数声明中给出默认值,在函数定义时可以不给出默认值。
(3)如果声明函数和定义函数都给出了默认值,不相同的话系统也不会报错,系统以先遇到的为准。
3、不能作重载函数
一个函数不能即作为重载函数,又作为有默认参数的函数。
因为当调用函数时,如果少写一个参数,系统无法判定是利用重载函数还是默认参数的函数。