函数重载

函数重载

什么是函数重载?

简单来说,函数重载就是同一个作用域,同名的函数,通过控制调用数据来决定函数的操作
下面来展示三种可以构成函数重载的方式

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

注意点

  1. 作用域不同,不构成重载
  2. 与函数默认参数可能有冲突
void func(int a, int b = 10) {}
void func(int a) {}
int main() {
    func(5);          // 既可以匹配func(int),也可以匹配func(int,10)
    return 0;
}
posted @ 2026-01-27 20:52  努力的小xu  阅读(5)  评论(0)    收藏  举报