C++进阶(四)函数高级

函数默认参数

  在c++中,函数的形参列表中的形参是可以有默认值的,这点与python一样。

  • 语法返回值类型 函数名 (参数=默认值){}
int add(int a, int b=10, int c=10){
	return a + b +c;
}

  这里要注意,如果某个位置已经有了默认参数,那么从这个位置往后,从左到右都必须有默认值。比如上例中b给定了默认参数,那么c也就要给默认参数。

  如果函数声明有默认参数,函数实现就不能有默认参数。(会重定义参数报错,因为编译器不知道按照哪个默认参数来取值。)

函数占位参数

  C++中函数的形参列表里可以有占位参数,用来做占位,调用函数时必须填补该位置。

  • 语法返回值类型 函数名 (数据类型){}
void func(int a, int 10){} // 占位参数还可以有默认参数
func(10, 10) // 调用

函数重载

  c++中可以允许函数名相同,提高函数复用性。需要满足一定条件:

  1. 同一个作用域下;比如不在任何一个函数内部,在全局作用域下。
  2. 函数名称相同;
  3. 函数参数类型不同,或者个数不同,或者顺序不同
void func(int a){}
void func(){}
// 调用
func() // 调用下面那个函数

  但是如果函数返回值类型不同,是不可以重载的,因为这个时候也会出现不知道调用哪个的情况。

引用作为重载条件

void func(int &a){}
void func(const int &a){}
int a=10;
func(a); // 调用不加const的函数
func(10); // 调用加const的函数

重载碰到函数默认参数

void func(int a, int b){}
void func(int a){}
// 调用时会报错,会出现函数二义性
// func(10) // 报错
func(10, 10) // 不报错

你可能感兴趣的:(cpp进阶)