目录
1、函数默认参数:
//当某个位置的参数有默认值,则从这个位置向后所有的参数都必须要有默认值
int func1(int a, int b = 10, int c = 10)
{
return a+b+c;
}
//函数的声明和定义之间只能其中一个有默认值,否则产生二义性的错误
int func2(int a = 10, int b = 10);
int func2(int a, int b)
{
return a+b;
}
int main()
{
//当函数参数有默认值时,函数调用时该参数可以不传参
cout<<func1(10,20)<<endl; //40,有默认值的参数未传参使用默认值,传参使用传参值
}
2、占位参数:
C++函数的形参列表里可以有占位参数用来占位,调用该函数时则必须填补该位置
语法:返回值类型 函数名(数据类型){}
void func1(int a, int)
{
cout<<"hello"<<endl;
}
void func2(int a, int = 1) //占位参数也可以有默认值,该默认值无法使用
{
cout<<"hello"<<endl;
}
int main()
{
func(10,20); //必须填补占位参数,且填补的值无法使用
func2(10); //当占位参数有默认值时,调用时可以不传参
}
3、函数重载:
作用:函数名可以相同,提高复用性
函数重载发生的条件:
a.在同一个作用域下
b.函数名称相同
c.函数参数类型不同或参数个数不同或顺序不同
注:函数的返回值类型不可以作为函数重载的条件
//同一作用域下
void func()
{
cout<<"func"<<endl;
}
void func(int a) //函数参数的个数不同
{
cout<<"func(int a)"<<endl;
}
void func(float a) //函数参数的类型不同
{
cout<<"func(float a)"<<endl;
}
void func(float a, int b)
{
cout<<"func(float a, int b)"<<endl;
}
void func(int b, float a) //函数参数的顺序不同
{
cout<<"func(int b, float a)"<<endl;
}
//int func(int b, float a) //函数参数的返回值类型不同,不能作为函数重载的条件
//{
//cout<<"func(int b, float a)"<<endl;
//}
int main()
{
func();
func(1);
func(1.5);
func(1.5,1);
func(1,1.5);
return 0;
}
注:引用作为函数重载的条件
void func(int &a)
{
cout<<"func"<<endl;
}
void func(const int &a) //参数类型不同
{
cout<<"func(const int &a)"<<endl;
}
int main()
{
int a = 10;
func(a); //func
func(10); //func(const int &a) [int &a = 10不合法;const int &a = 10合法]
}
注:函数重载碰到默认参数(应尽量避免函数重载时带有默认参数)
void func(int a, int b = 10)
{
cout<<"func(含默认参数)"<<endl;
}
void func(int a)
{
cout<<"func()"<<endl;
}
int main()
{
//func(1); 错误,两个函数都可被调用,产生二义性
func(1,2); //将调用第一个函数
}