函数重载
函数重载
什么是函数重载?
简单来说,函数重载就是同一个作用域,同名的函数,通过控制调用数据来决定函数的操作
下面来展示三种可以构成函数重载的方式
1. 参数数量不同
int add(int a) { //调用一个参数
return a;
}
int add(int a, int b) { //调用两个参数
return a + b;
}
int add(int a, int b, int c) { //调用三个参数
return a + b + c;
}
int main() {
int a = 1, b = 1, c = 1;
cout << "调用一个数据:" << add(a) << endl;
cout << "调用两个数据:" << add(a, b) << endl;
cout << "调用三个数据:" << add(a, b, c) << endl;
}
输出
调用一个数据:1
调用两个数据:2
调用三个数据:3
2. 参数的类型不同
int add(int a) {
return 1;
}
int add(char a) {
return 2;
}
int main() {
int a = 1, b = 1, c = 1;
cout<<"调用整数:"<<add(a)<<endl;
cout << "调用字符串:" << add('a')<<endl;
}
输出
调用整数:1
调用字符串:2
3. 参数的个数一致,但类型不同,顺序不同
int add(int a,char b) {
return 1;
}
int add(char a,int b) {
return 2;
}
int main() {
int a = 1, b = 1, c = 1;
cout<<"先整数再字符串:"<<add(a,'a') << endl;
cout << "先字符串再整数:" << add('a',a) << endl;
}
输出:
先整数再字符串:1
先字符串再整数:2
注意:如果两个函数同名、同参数列表,只是返回值不同,编译器会直接报 “重定义” 错误,因为它无法区分这两个函数
函数重载的匹配机制
1. 完全一致
传入的参数类型、个数、顺序,和某个重载函数完全一致,直接匹配这个函数,这是最常见的情况,故在此不做演示
2. 提升转换
如果没有匹配到合适的函数重载,那么将会自动尝试类型提升
char/short->int float->double
int fuction(int a) {
return a;
}
int main() {
int a = 'a';
cout<<fuction(a);
}
输出
97
3. 标准转换
如果提升转换也没有,那么就尝试
int->double int->long
double->int =(丢失小数)
int fuction(int a) {
return a;
}
int main() {
double a = 1.2;
cout<<fuction(a);
}
输出
1
注意点
- 作用域不同,不构成重载
- 与函数默认参数可能有冲突
void func(int a, int b = 10) {}
void func(int a) {}
int main() {
func(5); // 既可以匹配func(int),也可以匹配func(int,10)
return 0;
}

浙公网安备 33010602011771号