函数重载指C++中在同一片作用域中,可以声明几个函数名相同的函数。但是注意重载的函数名可以相同,其形参列表必须不同,不同可以体现在:参数个数、参数类型、参数顺序上;但是返回值不同不构成重载
以下为函数重载的示例:
namespace Xu{
int Add(int x, int y){
return x + y;
}
double Add(double x, double y){
return x + y;
}
long Add(long x, long y){
return x + y;
}
}
int main() {
int ret1 = Xu::Add(1,2);
double ret2 = Xu::Add(1.0, 2.0);
cout << ret1 << " " << ret2 << endl;
return 0;
}
经典的重载概念的面试题:
问:为什么C++支持重载而C语言不支持重载呢?
答:因为C的编译器在链接时直接使用函数名(声明的地方的)去关联函数(实际定义的函数),函数名相同时就不知道链接到哪个函数上了。 而C++的编译器会使用修饰过的函数名来关联函数而不是像C语言中直接使用函数名;修饰的元素有形参的个数,类型,顺序等,这样就会使得一样名字的函数在被修饰后不一样,这样链接时就知道找哪一个了。
问:若可以改变编译器使得编译器也能过利用函数返回值不同来修饰函数名,这样可不可以也构成重载?
答:不可以。 因为若两个同名函数,形参列表相同,返回值不同,确实是可以修饰成不一样的;但是调用函数时又没有要写返回值,直接一个函数名和参数,无法知道调用的是哪个。