C++ 成員函數 const 重載

衆所周知,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)

發佈了29 篇原創文章 · 獲贊 9 · 訪問量 12萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章