如果不希望某個物件的值被改變,則定義該物件的時候可以在前面加const
關鍵字
class ctest
private:
int m_value;
};const ctest obj; // 常量物件
在類的成員函式後面可以加const
關鍵字,則該成員函式成為常量成員函式。
class sample
// 常量成員函式
void func(){}
int m_value;
};void sample::getvalue() const // 常量成員函式
int main()
兩個成員函式,名字和參數列都一樣,但是乙個是const,乙個不是,那麼是算是過載。
class sample
int getvalue() const // 常量成員函式
int getvalue() // 普通成員函式
int m_value;
};int main()
執行結果:
常量成員函式 1
普通成員函式 2
引用前面可以加const關鍵字,成為常引用。不能通過常引用,修改其引用的變數的。
const int & r = n;
r = 5; // error
n = 4; // ok!
物件作為函式的引數時,生產該物件引數是需要呼叫複製建構函式的,這樣效率就比較低。用指標作為引數,**又不好看,如何解決呢?
可以用物件的引用作為引數,防止引發複製建構函式,如:
class sample
;void func(sample & o) // 物件的引用作為引數
但是有個問題,物件引用作為函式的引數有一定的風險性,若函式中不小心修改了形參0,則實參也會跟著變,這可能不是我們想要的,如何避免呢?
可以用物件的常引用作為引數,如:
class sample
;void func(const sample & o) // 物件的常引用作為引數
這樣函式中就能確保不會出現無意中更改o值的語句了。
常量物件與常量成員函式
常量物件與常量成員函式來防止修改物件,實現最低許可權原則。可以用關鍵字const來指定物件是不可修改的,任何修改該物件的企圖,都會導致編譯錯誤。例如 const time noon 12,0,0 宣告乙個 time 類的常量物件 noon 並將它初始化為中午 12點。c 不允許在常量物件上呼叫成員函...
常量成員函式與常量物件
一 非常量物件可以訪問類的普通成員函式和常量成員函式 include using namespace std class stack void push int nelem intpop int getcount const 常量成員函式 int main 二 常量物件只能訪問常量成員函式,不能訪問...
常量成員函式
參考 常量成員函式宣告 如 int get const 規則 1.常量成員函式不修改物件。2.常量成員函式在定義和宣告中都應加const限定 3.非常量成員函式不能被常量成員函式呼叫,但建構函式和析構函式除外。4.常量 const物件 物件只能呼叫常量成員函式。const物件的資料成員在物件壽命週期...