一.缺省参数:
形参a和b都带有默认值
用户用掉该函数时,没传参,就用默认值。传参就用所传值。
1,分类:
1.全缺省参数:每个参数都带有默认值
void T(int a=1,int b=2,int c=3){
cout<<“a=”<<a<<endl;
cout<<“b=”<<b<<endl;
cout<<“c=”<<c<<endl;
int main(){
T(); // 1 2 3
T(10); // 10 2 3
T(10,20); // 10 20 3
T(10,20,30) // 10 20 30
2.半缺省参数:必须从右往左依次给出,不能间隔着给
void T(int a=1,int b=2,int c=3){
cout<<a<<""<<b<<""<< c<<endl;
e.g.//以下三个场景
void T(int a,int b=2,int c=3) 代码可以编译
void T(int a=1,int b,int c=3) 不可以
void T(int a=1,int b=2,int c) 不可以
T(10)
3.缺省参数可以再声明位置给出,也可以在定义位置给出,但是不
能同时两个位置给出。 最好在声明位置给出
e.g.
void T(int a=10)
void T(int a=20){
cout <<a<<endl;
}
二.函数重载:
1.概念:在相同作用域中,函数名字相同,参数列表不同
e.g.
void T(){
}
int T(){
return 0;
} 不能重载,参数列表相同,不能重载。
注意:如果两个函数仅仅是返回类型不同,则不能构重载
2.参数列表不同体现:
1.参数个数不同。
2.参数列表不同。
3.参数类型次序不同
void T()
void T(int a )
void T(char c)
void T(int a ,char c)
void T(char, int a )
3.函数重载的调用原理:
编译器在编译阶段,会对函数实参类型进行推演,根据推演的实际结果找类型
匹配的函数进行调用。有匹配类型,直接调用。如果没有,则会隐式类型转换,
转后有对应的就调用,没有对应就报错。
e.g.
int add(int lefe ,int right){
return left+ringht;
}
double add(double lefe ,double right){
return left+ringht;
}
int main(){
add(10,20);
add(1.2,3.4);
add(‘1’,‘2’)// char和int 直接隐式类型转换->add(int, int )
add(“hello”,“wordl”)// char*,char*—>无char*且无法隐式类型转换则报错
add(1,1.2)//转换后有add(int,int)有add(double,double)发现两个都可以,编译器不知道调用哪个,则报错。
}