衆所周知,C++類實現函數重載有兩種情況:函數參數的類型不同,參數的個數不同。而與函數的返回值沒有什麼關係。還有一種類成員函數重載,它並不要求函數的參數類型不同。下面給出例子:
#include <iostream>
using namespace std;
class A
{
public:
A(int a):_a(a){}
void print()const//函數體中不能修改數據成員對象,否則報錯
{
cout <<"const " << _a << endl;
}
void print()//函數體中可修改成員對象
{
_a = 23;
cout <<"non-const " << _a << endl;
}
private:
int _a;
};
int main()
{
A a(12);
a.print();//如果以上沒有non-const重載,那麼此處執行const函數
const A b(12);
b.print();
return 0;
}
上面的代碼運行結果爲:
non-const 23
const 12
因此類成員函數重載並不是絕對的參數列表中參數類型必須不同。爲什麼可以這樣。這其實涉及到了C++對象模型的底層實現。類的這兩種函數編譯後,其登記的名字是不同的,因此可以共同存在。
轉載請註明出處(http://blog.csdn.net/gulansheng/article/details/45827755)