C++学习之函数的高级
函数的默认参数
在C++中函数的形参列表中,可以给形参赋一个默认值
语法:返回类型 函数名(形参类型 形参名字 = 默认值){}
int func (int a = 0;int b = 0){}
当调用函数时,如果传入实参有值时,使用实参的值,如果实参没有传入值,将使用的是形参的默认值。
注意事项:
1、如果某个位置已经有了默认参数,那么从这个位置往后,从左到右都必须有值。
2、如果这个函数的声明有了默认参数了,那么这个函数的实现就不能有默认参数。(声明与实现只能有一个有默认值)
int func (int a = 10 ;int b =10);//声明
int func (int a = 20 ;int b =20){...}//实现
如果声明与实现的形参都有了默认值,会产生歧义性。
函数占位参数
c++函数中的形参列表可以有占位参数,用来做占位,调用函数时必须填补该位置。
语法:返回类型 函数名(参数类型){}
int function (int ){};
占位参数还可以有默认参数
int function (int = 10){};
函数重载
作用:函数名相同,提高复用性
条件:
1、同一个作用域下
2、函数名相同
3、函数的形参参数不同(参数个数、参数类型、参数类型)
int func();
int func(int a);
int func(double a);
...
注意事项:不可以按函数的返回类型来作为重载的条件
1、引用作为函数重载的条件
int func1(int &a){};
int func1(const int &a){};
上面两个函数属于函数重载(参数类型不同)
int a = 10;
func1(a); //调用的是int func1(int &a){};
func1(10);//调用的是int func1(const int &a){};
2、函数重载遇到默认参数
int func2(int a,int b =10){};
int func2(int a){};
上面两个函数属于函数重载(参数个数不同)
func2(20);//这里就会报错,出现二义性(两个函数都可以调用)
//结论:写了重载之后,最好不要使用默认参数