(1)我们知道函数的重载时根据函数的参数类型以及函数参数个数来重载的,不能用函数返回值来重载函数。但是有时候函数参数个数和函数参数类型重载函数会和默认参数发生冲突:
int fun(int i,char c='a'){ } int fun(int i){ } int main(){ int i fun(i);//此时函数重载和函数默认参数就会出现问题,此时不知道具体调用的是哪一个函数 fun(i,'b');//这样调用就不会出现错误,此时明确知道调用的是哪一个函数 //出现上述重载函数时,int fun(int i)只要一调用就会出现错误 }
(2)在类的成员函数里面,const成员函数和非const成员函数可以出现重载,这是因为在成员函数中,const是用来修饰const成员函数的参数this指针的,故可以用来重载函数,但是这样用会不太好,如下代码
1 /* 2 * Const_Overloda.h 3 * 4 */ 5 #ifndef CONST_OVERLOAD_H 6 #define CONST_OVERLOAD 7 class Const_Overload 8 { 9 int i; 10 public: 11 Const_Overload(int ii=0); 12 ~Const_Overload(); 13 int f()const; 14 int f(); 15 }; 16 #endif
1 /* 2 * Const_Overloda.cpp 3 * 4 */ 5 6 #include "Const_Overload.h" 7 #include<iostream> 8 9 Const_Overload::Const_Overload(int ii) :i(ii) 10 { 11 } 12 13 14 Const_Overload::~Const_Overload() 15 { 16 } 17 int Const_Overload::f()const{ 18 std::cout << "f() const is running!" << std::endl; 19 return i; 20 } 21 22 int Const_Overload::f(){ 23 24 std::cout << i << std::endl; 25 return 0; 26 }
1 /* 2 * demo.cpp 3 */ 4 5 #include"Const_Overload.h" 6 #include<iostream> 7 using namespace std; 8 9 int main(){ 10 int i; 11 Const_Overload v(12); 12 v.f();//调用的是非const成员函数 13 const Const_Overload v1(20); 14 v1.f();//此时调用的是const成员函数 15 system("pause"); 16 return 0; 17 }
上述代码中,我们用const重载了f函数,其实这种重载时虽然不违反语法规定,但是这种重载时没有实际含义的,因为两个函数功能完全不同,用重载是不符合常规的,应该把他们写成两个不同的函数名,而不是用重载