const修飾的變數稱為常變數,不可修改,而const修飾的類成員函式限制為不可修改類的成員,只能讀取。
寫法是將const放在函式引數列表後面,而不是放在函式前面或者放入引數列表內:
在類體之外定義const函式也需要加const:class
test()
;
1.const成員函式只能讀取類的資料成員,不能修改;非const成員函式可以讀寫資料成員int test::
getnum()
const
—那麼為什麼const成員函式不可以修改類的資料成員呢???
因為預設this指標。
物件呼叫成員函式時,會在形參列表的最前面加乙個形參this。它是乙個常量指標,即指向常量的指標,type * const ,因為不可以修改this指標儲存的位址。
當成員函式引數列表後加了關鍵字(void getint() const),此時它的隱式this指標就變成了const type* const,成了指向常量的常量指標,也就是它指代的內容不可被修改。和python裡面的成員函式形參self相似。
但有一點值得注意,如果成員屬性是指標,則const成員函式可以修改指標指向的內容,編譯器不會報錯。
2.const修飾的類的物件只能呼叫const函式,不能呼叫非const函式。> 這裡是引用
class
name
;void
setname
(const string &s)
const
}
假如有物件obj,呼叫函式obj.getint(),這時會隱式地傳入乙個引數 &obj。
const修飾的物件,傳入的引數就是const type* 型別的。
(1)呼叫const成員函式時,const成員函式的隱式this指標型別是
const type * const,是可以進行傳參的。
(2)呼叫非const成員函式,隱式this指標是type *const 型別,const type* 不能傳參過去(因為值不能給修改),所以const物件不能呼叫非const函式。
(3)假如obj是非const物件,它就可以呼叫const和非const成員函式。因為
type * 型別的引數傳入const type * const 型別引數和type * const 型別引數都是可以的。
C 之const類成員變數,const成員函式
const修飾類的成員函式 const修飾變數一般有兩種方式 const t a,或者 t const a,這兩者都是一樣的,主要看const位於 的左邊還是右邊,這裡不再贅述,主要來看一下當const修飾類的成員函式時,成員函式有什麼特點。類的成員函式後面加 const,表明這個函式不會對這個類物...
C 的const類成員函式
我們知道,在c 中,若乙個變數宣告為const型別,則試圖修改該變數的值的操作都被視編譯錯誤。例如,cpp view plain copy const char blank blank n 錯誤 物件導向程式設計中,為了體現封裝性,通常不允許直接修改類物件的資料成員。若要修改類物件,應呼叫公有成員函...
C 的const類成員函式
我們知道,在c 中,若乙個變數宣告為const型別,則試圖修改該變數的值的操作都被視編譯錯誤。例如,cpp view plain copy 01.const char blank 02.blank n 錯誤 物件導向程式設計中,為了體現封裝性,通常不允許直接修改類物件的資料成員。若要修改類物件,應呼...