函数重载的4种错误示例:
#include <iostream> #include <string> using namespace std; //函数重载 同函数名,函数重载有3种情况:参数类型不同、参数个数不同、参数顺序不同 //1.不能根据返回类型作为重载的依据 #if 0 int add(int num1,int num2) { cout << "int add(int num1,int num2)" << endl; return num1+num2; } #endif //-- #if 0 float add(int num1,int num2) //error: 只是返回类型不同,函数名、参数都一致,则不能算作重载,int add()和float add()一起出现会报错,故用#if屏蔽 { cout << "float add(float num1,float num2)" << endl; return num1+num2; } #endif #if 0 //2.存在二义性,因为int可以转成long,也可以转成double,编译器不知道应该调用哪个函数 long add(long num1,long num2) { cout << "long add(long num1,long num2)" << endl; return num1+num2; } double add(double num1,double num2) { cout << "double add(double num1,double num2)" << endl; return num1+num2; } #endif //3.存在二义性,因为int可以赋给int,也可以赋给const int&,也可以赋给int&,编译器不知道应该调用哪个函数 #if 0 int add(int num1,int num2) { cout << "int add(int num1,int num2)" << endl; return num1 + num2; } //-- int add(const int &num1,const int &num2) //重载了第1个add函数 { cout << "int add(const int &num1,const int &num2)" << endl; return num1 + num2; } //-- int add(int &num1,int &num2) //重载了第1个add函数 { cout << "int add(int &num1,int &num2) " << endl; return num1 + num2; } #endif //4.存在二义性,编译器不知道应该调用哪个函数 int add(int num1,int num2) { cout << "int add(int num1,int num2)" << endl; return num1+num2; } //-- ,) { cout << "int add(int num1,int num2=0,int num3=0)" << endl; return num1+num2+num3; } int main() { //1.不能根据返回类型作为重载的依据 #if 0 int res; res = add(,); //error,存在二义性,因为int可以转成long,也可以转成double,编译器不知道应该调用哪个函数 #endif //2.存在二义性,因为int可以转成long,也可以转成double,编译器不知道应该调用哪个函数 #if 0 int num1,num2; long res; //res = add(num1,num2); //error,存在二义性,因为int可以转成long,也可以转成double,编译器不知道应该调用哪个函数 #endif //3.存在二义性,因为int可以赋给int,也可以赋给const int&,也可以赋给int&,编译器不知道应该调用哪个函数 #if 0 int res; res = add(,); //erroe:存在二义性,编译器不知道应该调用哪个函数 #endif //4.存在二义性,编译器不知道应该调用哪个函数 int res; //res = add(1,2); //error:存在二义性,编译器不知道应该调用哪个函数 }