C const 成員函式

2021-09-26 06:53:39 字數 1016 閱讀 8166

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在 右側,則指標本身...