一、函数的默认参数

c++中,函数的形参列表中的参数说可以有默认值的。

语法:返回值类型 函数名 {参数= 默认值} { }

int add(int a, int b)
{
	return a+b;
}

int main()
{
	add(10, 20);//这时候少写一个参数都会报错
  system("pause");
  return;
}

可以修改这个add函数给他一个默认值
int add(int a, int b = 20)
{
	return a+b;
}

int main()
{
	add(10);//这时候只给一个参数也不会报错
  system("pause");
  return;
}

函数_引用做函数参数

函数_默认参数_02

函数_默认参数_03

函数_函数占位符_04

函数_函数占位符_05

  1. 如果传入了数据,就用自己传入的,如果没有,就使用默认值
  2. 如果某个位置已经有了默认参数,那么从这个位置往后,从左到右都必须有默认值
  3. 如果函数的声明有了默认参数了,函数的实现就不能有默认参数

二、函数的占位参数

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

语法:返回值类型 函数名(数据类型){}

void func(int a, int) //只写了一个数据类型用于占位
{
	cout << "this is func" << endl;
}

int main()
{
	func(10, 10); //调用时填补占位
  system("pause");
  return 0;
}

三、函数重载

作用:函数名相同,提高复用性

函数重载的满足条件:

  • 同一个作用域下
  • 函数名相同
  • 函数参数类型不同或者个数不同或者顺序不同

函数的返回值不作为函数重载的条件

int add(int a, int b)
{
	return a+b;
}

int add(double a, double b) //参数类型不同
{
	return a+b;
}

int add(int a, int b, int c)//参数个数不同
{
	return a+b+c
}

int add(int a, double b)
{
	return a+b;
}

int add(double a, int b) //顺序不同
{
	return a+b;
}

函数重载的注意事项

1.当引用作为函数重载的条件

void fun(int& a) //int &a = 10 不合法
{
	cout << "fun(int& a)调用" << endl;
}

void fun(const int& a) //const int &a = 10 合法
{
	cout << "fun(const int& a)调用" << endl;
}
//以上两个可以作为重载的条件
int main()
{
	//int a = 10;
  //fun(a); //会调用fun(int& a)
  
  fun(10); //会调用fun(const int& a)
  system("pause");
}

2.函数碰到默认参数

void func(int a)
{
	cout << "func(int a)" << endl;
}

void func(int a, int b = 10)
{
	cout << "func(int a, int b)" << endl;
}

int main()
{
	func(10); //上面两个函数都可以调用,第一个一定可以,第二个有默认参数也可以
  //编译器不知道该调用哪个,所以要避免这种情况
  system("pause");
  return 0;
}