C语言是实现不了重载的,只要两个函数名称相同,就会报错,但是C++可以实现函数的重载,接下来我们看一下重载的规则。
1.重载规则:
(1)函数名相同
(2)参数的个数,类型,顺序不同都可以构成重载
(3)返回值类型不相同不可以构成重载
接下来我们看下具体的例子:
void func(int a);
void func(char a);
void func(char a,int b);
void func(int a, char b);
char func(int a); //与第一个函数有冲突,不能构成重载
程序运行的时候怎么识别出具体使用哪个函数呢?所以我们还要了解匹配的原则
2.匹配原则:
(1)严格匹配,找到即调用
(2)通过隐式转换寻求一个匹配,找到即调用
#include <iostream>
using namespace std;
void print(float a){
cout<<a<<endl;
}
void print(int a){
cout<<a<<endl;
}
int main(){
print(1); // 调用print(int)
print('a'); // 调用print(int)
print(1.11f); //调用 print(float)
print(1.1); /*注意会产生二义性,计算机识别不出到底调用那个函数,会报错C:\XXX\main.cpp:16: error: call of overloaded 'print(double)'is ambiguous*/
return 0;
}
注:
C++ 允许,int 到long 和double,double 到int 和float 隐式类型转换。遇到这种情型,则会引起二义性。