const(常)成員函式是一種獲取物件狀態的成員函式,並且不能改變物件的狀態(也就是不能修改物件的成員的值)。宣告和定義如下:
classa;
a::void
func()
const
問題一:如果有兩個同名函式,只是其中乙個是常成員函式,這樣的寫法有錯嗎?
class
a;
編譯器並沒有報錯!
問題二:形參列表應該是一樣的,呼叫的時候,計算機怎麼知道是調的哪乙個函式?
classa;
void
func()
const;}
;int
main()
輸出:說明func()
func() const
const物件才能呼叫const成員函式
!
要弄清這個問題,首先要明白不同的物件是如何共用同乙個成員函式的。我們暫且不談const成員函式,以普通成員函式為例:
int
main()
當a1和a2分別呼叫成員函式時,func()是如何辨別這兩個物件的呢?
實際上,成員函式有乙個隱藏引數——this指標
!也就是說,編譯器對成員函式的處理實際上是這樣的:
classa;
a::void
func
(a *
this
)
這樣,便能分辨是哪個物件呼叫了成員函式。我們再回頭看這個問題,就很清楚了,實際上編譯器處理如下:
class
a;
很明顯,這兩個函式互為過載
!過載函式當然同名,而且const物件a2傳入的this指標是const指標,才能呼叫const成員函式。 c const成員函式
一些成員函式改變物件,一些成員函式不改變物件。例如 int point gety 這個函式被呼叫時,不改變point物件,而下面的函式改變point物件 void point setpt int x,int y 為了使成員函式的意義更加清楚,我們可在不改變物件的成員函式的函式原型中加上const說明...
C const成員函式
原文 我們知道,在c 中,若乙個變數宣告為const型別,則試圖修改該變數的值的操作都被視編譯錯誤。例如,const char blank blank n 錯誤物件導向程式設計中,為了體現封裝性,通常不允許直接修改類物件的資料成員。若要修改類物件,應呼叫公有成員函式來完成。為了保證const物件的常...
C const成員函式
const可以用於替換 define 使用巨集定義可能並不會加入記號表 symbol table 例如 define pi 3.14159 const double pi 3.14159 而對於const與指標同時出現的情況 如果const在 左側,則被指物為常量 如果const在 右側,則指標本身...