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性質.它在編譯時,以是否修改成員數據爲依據,進行檢查.