函数重载(overload)是指多个函数使用相同的函数名。函数重载是多态性的体现,即使用同一个函数名实现多种函数调用。
调用重载函数时,C++编译器根据函数的实参类型来确定所调用的函数。因此,重载函数定义时,必须使彼此在参数个数 或 参数类型上有所不同。
在调用同名函数时,编译器怎么知道到底调用的是哪个函数呢?编译器是根据函数调用语句中实参的个数和类型来判断应该调用哪个函数的。因为重载函数的参数表不同,而调用函数的语句给出的实参必须和参数表中的形参个数和类型都匹配,因此编译器才能够判断出到底应该调用哪个函数。
仅返回值不同,不能定义为重载函数。因为C++允许 return 语句返回的表达式的类型与函数的类型不同(这时由系统做自动强制类型转换),在函数调用时编译器并不关心函数的返回值类型,而在函数返回时才涉及函数的返回值类型。
此外,还需注意两点:
(1)不允许重载main() 函数,因为main()函数是C++程序执行的唯一入口
(2)函数重载时,避免使用形参的默认值。
比如:
int add( int x, int y, int z=10) {return x+y+z}
int add(int x, int y) {return x+y}
此时调用函数 add( 5, 10)时,系统不确定调用哪个add()方法。
大部分的操作符可以被重载(其实质也是函数的重载),**"."、"::"、"? :“和"sizeof”**不可被重载。只能通过成员函数进行重载的: “=”、"()"、"[ ]"、"->"。