const成員函數

const成員函數
const只能放在函數聲明的尾部,大概是因爲其它地方都已經被佔用了。這個聲明表示任這個函數不會修改類中的數據成員。如果在編寫const成員函數時,不慎修改了數據成員,或者調用了其它非const成員函數,編譯器將指出錯誤,這無疑會提高程序的健壯性。
以下程序中,類stack的成員函數GetCount僅用於計數,從邏輯上講GetCount應當爲const函數。編譯器將指出GetCount函數中的錯誤。

class Stack
{
    public:
    void Push(int elem);
    int Pop(void);
    intGetCount(void) const; // const 成員函數
    private:
    int m_num;
    int m_data[100];
};
int Stack::GetCount(void)const
{
    ++ m_num; // 編譯錯誤,企圖修改數據成員m_num
    Pop();// 編譯錯誤,企圖調用非const函數
    returnm_num;
}
class A
{
public:
    void foo() const { std::cout << "A::foo() const" << std::endl;}
    void foo() { std::cout << "A::foo()" << std::endl;}
    void foo2() { std::cout << "A::foo2()" << std::endl; }
};

int main(int, char**)
{
    A a;
    a.foo();
                    
    a.foo2();

    const A aa;
    aa.foo();
                    // aa.foo2(); 會報錯
                    // const 的僅能訪問const 的
    return 0;
}

關於Const函數的幾點規則:
a.在類中被const聲明的成員函數只能訪問const成員函數,而非const函數可以訪問任意的成員函數,包括const成員函數…
b.在類中被const聲明的成員函數不可以修改對象的數據,不管對象是否具有const性質.它在編譯時,以是否修改成員數據爲依據,進行檢查.

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章