C 之 const類成員函式

2021-09-28 15:21:10 字數 1252 閱讀 9753

const修飾的變數稱為常變數,不可修改,而const修飾的類成員函式限制為不可修改類的成員,只能讀取。

寫法是將const放在函式引數列表後面,而不是放在函式前面或者放入引數列表內:

class

test()

;

在類體之外定義const函式也需要加const:

int test::

getnum()

const

1.const成員函式只能讀取類的資料成員,不能修改;非const成員函式可以讀寫資料成員

—那麼為什麼const成員函式不可以修改類的資料成員呢???

因為預設this指標。

物件呼叫成員函式時,會在形參列表的最前面加乙個形參this。它是乙個常量指標,即指向常量的指標,type * const ,因為不可以修改this指標儲存的位址。

當成員函式引數列表後加了關鍵字(void getint() const),此時它的隱式this指標就變成了const type* const,成了指向常量的常量指標,也就是它指代的內容不可被修改。和python裡面的成員函式形參self相似。

但有一點值得注意,如果成員屬性是指標,則const成員函式可以修改指標指向的內容,編譯器不會報錯。

> 這裡是引用

class

name

;void

setname

(const string &s)

const

}

2.const修飾的類的物件只能呼叫const函式,不能呼叫非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 錯誤 物件導向程式設計中,為了體現封裝性,通常不允許直接修改類物件的資料成員。若要修改類物件,應呼...