函数提高
函数的默认参数
在C++中,函数的形参列表中的形参是可以有默认值的。
语法:返回值类型 函数名 (参数=默认值){}
注意事项:
1、如果某个位置已经有了默认参数,那么从这个位置往后,从左往右都必须有默认值。
2、如果函数的声明有了默认参数,函数的实现就不能有默认参数。(Demo好像没有报错)
int func(int a=100,int b=20,int c=3){ //调用时只传送了a=1一个实参
return a+b+c; //因此传回值=1+20+3=24
}
void demo(int a,int b,int c=1,int d=0){
//如果某个位置已经有了默认参数,那么从这个位置往后,从左到右都必须有默认值
//这里的位置即c,c左侧可以不带默认参数,但c右侧的形式参数必须带默认值
}
int main(){
int demo2(int a,int b=2,int c=10);
int a=1,b=2,c=3;
cout<<func(a)<<endl; //只传送一个实参a=1,其余都按子函数规定的默认缺省值
cout<<demo2(10,100)<<endl;
system("pause");
return 0;
}
int demo2(int a,int b=10,int c=10){ //在声明和定义函数中都有默认参数
return a+b+c;
}
函数占位参数
C++中函数的形参列表里可以有占位参数,用来做占位,调用函数时必须填补该位置。
语法: 返回值类型 函数名 (数据类型){}
占位参数还可以有默认参数
void func2(int a,int =10){
//占位参数带默认参数
}
int func(int a,int){
cout<<"here is func"<<endl;
}
int main(){
func(10,10);
system("pause");
return 0;
}
函数重载
函数重载概述
作用: 函数名可以相同,提高复用性
函数重载满足条件:
- 同一个动作域下
- 函数名称相同
- 函数参数 类型不同 或者 个数不同 或者 顺序不同
- 注意: 函数的返回值不可以作为函数重载的条件
void func(){
cout<<"子函数func"<<endl;
}
void func(int a,char b){ //参数个数不同
cout<<"a="<<a<<"\tb="<<b<<endl;
}
void func(char a,int b){ //参数类型不同
cout<<"a="<<a<<"\tb="<<b<<endl;
}
/*
int func (){ //返回值类型不同不能作为函数重载的条件
return 100;
}
*/
int main(){
//函数重载,提高函数复用性
func();
func(10,'v');
func('v',20);
system("pause");
return 0;
}
函数重载注意事项
- 引用作为重载条件
- 函数重载碰到函数默认参数
void func(int &a){
cout<<"a="<<a<<endl;
}
void func(int &a,int b,int c=10){
cout<<"a="<<a<<"\tb="<<b<<"\tc="<<c<<endl;
}
void func(const int &a){
cout<<"const a="<<a<<endl;
}
int main(){
int a=10;
func(a); //输出 a=10
func(a,5); //输出a=10 b=5 c=10
func(10); //输出const a=10
return 0;
}