C const常量物件 常量成員函式和常引用

2022-01-09 21:46:02 字數 1333 閱讀 3204

如果不希望某個物件的值被改變,則定義該物件的時候可以在前面加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物件的資料成員在物件壽命週期...