一、函数的默认参数
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;
}
- 如果传入了数据,就用自己传入的,如果没有,就使用默认值
- 如果某个位置已经有了默认参数,那么从这个位置往后,从左到右都必须有默认值
- 如果函数的声明有了默认参数了,函数的实现就不能有默认参数
二、函数的占位参数
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;
}