C 系列 22 const成員

2021-09-14 06:38:17 字數 2229 閱讀 6266

將const修飾的類成員函式稱之為const成員函式,const修飾類成員函式,實際修飾該成員函式隱含的this指標,表明在該成員函式中不能對類的任何成員進行修改。即有''讀''的許可權,但沒有''寫''的許可權。

void display() const
我們需要注意的是:this指標型別為:類型別* const ,始終指向呼叫成員函式物件的位址,其位址不能變,對值無限制。成員函式經const修飾,其值也不能改變。對const的使用在c語言階段就已然涉及,我們再次回顧學習一遍:

// const修飾的四大基本情況

const int a = 10;

a = 20; // 編譯不通過,a為常量

const int* pa = &a;

pa = &b; // 位址可以改變,pa為指標,不為常量,對指向空間無限制

*pa = 100 // 指向內容不能改變,*pa為常量

int* const pa = &a; // 指標為const,即指標內所存位址不能變,對指向空間加限制

const int* const pa = &a; // 位址不能變,位址中的內容也不能變

建立了兩個物件,d1、d2,其中d1為普通物件,d2為const物件。在呼叫display函式時,d1就呼叫普通的成員函式,d2因為為const物件,不可寫,即呼叫const成員函式。實質上,這兩個成員函式構成了過載函式。當我們把非const成員函式注釋掉之後,呼叫關係又是什麼呢?

測試結果:編譯通過,普通物件也呼叫const成員函式。那麼我們把const成員函式注釋掉,呼叫關係又該怎樣變化呢?

class date 

date(const date& d)

//void display() const

void display()

private:

int _year;

int _month;

int _day;

};int main()

測試結果:報錯,編譯不通過。const物件,呼叫非const成員函式,直接報錯。因為可能內容會被修改,導致直接報錯。

總結:許可權可以被縮小但不能被放大,普通物件可以呼叫普通成員函式,也可以呼叫const成員函式,只是在呼叫const成員函式時,無法進行''寫''操作。而const物件一定不能進行寫操作,所以不能呼叫普通成員函式。並且,普通成員函式內部可以呼叫const成員函式,而const成員函式內部不能夠呼叫普通成員函式。舉乙個很直觀的例子:乙個大胖子的衣服,乙個小瘦子能夠穿進去,但是,反過來,胖子是穿不上瘦子的衣服的。在此,''可讀可寫''就相當於胖子,''唯讀''就相當於瘦子。

C 之const類成員變數,const成員函式

const修飾類的成員函式 const修飾變數一般有兩種方式 const t a,或者 t const a,這兩者都是一樣的,主要看const位於 的左邊還是右邊,這裡不再贅述,主要來看一下當const修飾類的成員函式時,成員函式有什麼特點。類的成員函式後面加 const,表明這個函式不會對這個類物...

複習 C 之const成員

const int num 0 常量必須要初始化,而且不可修改。int num 100 const int p 在這兩句 後,p可以修改,p不可以修改。int num 100 int const p 在這兩句 後,p可以修改,p不可以修改。所以變數能不能修改看的是宣告時const後面的是什麼。con...

C 的const成員函式

我們知道,在c 中,若乙個變數宣告為const型別,則試圖修改該變數的值的操作都被視編譯錯誤。例如,cpp view plain copy const char blank blank n 錯誤 物件導向程式設計中,為了體現封裝性,通常不允許直接修改類物件的資料成員。若要修改類物件,應呼叫公有成員函...