函数的默认参数
int func(int a, int b=20, int c=30)
{
return a + b + c;
}
int main()
{
cout << func(10) <<endl;//默认b=20, c=30
cout << func(10, 30)<<endl; //b=30, 默认c=30
//如果我们传了数据,则用我们传入的数据
//如果我们没传,则用默认值
}
//注意点
//1.如果某个位置有了默认参数,则从这个位置往后,都必须有默认参数
int func2(int a, int b=10 , int c) // 错误, c必须有默认参数
//2. 如果函数的声明有了默认参数,函数的实现不能有默认参数
//声明和实现只能有一个有默认参数
int func3(int a=10, int b=10);
int func3(int a=10, int b=10)//重定义的默认参数
{
return a+b;
}
函数的占位参数
//函数占位参数,占位参数可以有数据类型
void func(int a, int){}
//占位参数可以有默认参数
void func2(int a, int =10){}
int main()
{
func(10);//不允许,不满足占位参数要求
func(10, 10)//允许,补全了占位参数
func2(10)//允许,默认参数
return 0;
}
函数重载
函数名可以相同,提高复用性
- 同一个作用域下
- 函数名称相同
- 函数参数类型不同或个数不同,顺序不同
void fun()
{
cout << "func" << endl;
}
void fun(int a)
{
cout << a << endl;
}
void fun(double a)
{
cout << "double a" << endl;
}
int main()
{
func(); // "func"
func(2); // "2"
func(3.14); // "doouble 3.14"
return 0;
}
注意
//引用作为重载的条件
void func(int &a)
{
cout << "a" << endl;
}
void func(const int &a)
{
cout << "const a" << endl;
}
//函数重载遇到默认参数
void func2(int a)
{
cout << "a" << endl;
}
void func2(int a, int b=10)
{
cout << "a, b" << endl;
}
int main ()
{
int a = 10;
func(a); // "10"
const int a = 10;
func(a); // "const 10"
int a = 10;
int b = 10;
func2(a);//二义性
func2(a, b);// "10, 10"
return 0;
}