函数高级学习
函数默认参数
函数的形参列表中的形参是可以有列表值的
1.如果某个位置参数有默认值,那从它开始往右都得有默认值
2.如果函数声明的时候有默认值,则函数实现的时候就不能有默认值,反之亦然,不然会报错
int func(int a, int b, int c)
int func(int a = 10, int b, int c) //不符合要求,后面参数也要有默认值
//函数声明的时候有默认值,则函数实现的时候就不能有默认值,反之亦然
int func(int a = 10, int b, int c)
int func(int a = 10, int b, int c){
return a + b + c;
}
函数占位参数
形参列表里可以有占位参数,用来作占位,调用函数时必须要填补其位置
格式:返回值类型 函数名 (数据类型){}
void func(int, int){
cout <<"shuchu"<<endl;
} //调用此函数时必须要传递func(10,10) 占位参数必须填补
函数重载
作用:函数名可以相同,提高复用性
满足条件:
1.同一作用域
2.函数名相同
3.函数参数类型 或 个数 或 顺序 不同
注意:函数的返回值不可以作为函数重载的条件
void func(){
cout<<"func()的函数!!"<<endl;
}
void func(int a){
cout<<"func(int a)的函数!!"<<endl;
} //1.函数在同一作用域都在全局作用域
int void func(double b){
cout<<"func()的函数!!"<<endl;
} //报错,函数的返回值不可以作为函数重载的条件
int main(){
func;
func(10);//3.参数类型 或 个数 或 顺序 不同
}
注意事项:
1.引用作为重载条件
2.函数重载碰到函数默认参数
void func(int &a){
cout<<"func()的函数!!"<<endl; //int &a = 10 不合法需要的是一个地址
}
void func(const int &a){
cout<<"func(const)的函数!!"<<endl; //const int &a = 10编辑器会处理则合法
}
int main(){
int a = 10;
func(a); //走的是func(int &a)
func(10); //走的是func(const int &a)
}
2.函数重载碰到函数默认参数
void func(int a, int b = 20){
cout<<"func(int a)的函数!!"<<endl;
}
void func(int a){
cout<<"func(int a)的函数!!"<<endl;
}
int main(){
func(10); //报错,会出现二一性
func(10,20)//没错