C 的const類成員函式 精華版

2021-07-05 01:32:02 字數 2005 閱讀 1754

我們知道,在c++中,若乙個變數宣告為const型別,則試圖修改該變數的值的操作都被視編譯錯誤。例如,

[cpp]view plain

copy

const

char

blank = 『』;  

blank = 『\n』;  // 錯誤

物件導向程式設計中,為了體現封裝性,通常不允許直接修改類物件的資料成員。若要修改類物件,應呼叫公有成員函式來完成。為了保證const物件的常量性,編譯器須區分不安全與安全的成員函式(即區分試圖修改類物件與不修改類物件的函式)。例如,

[cpp]view plain

copy

const

screen blankscreen;  

blankscreen.display();   // 物件的讀操作

blankscreen.set(『*』);    // 錯誤:const類物件不允許修改 在

c++中,只有被宣告為

const

的成員函式才能被乙個

const

類物件呼叫。

要宣告乙個const型別的類成員函式,只需要在成員函式引數列表後加上關鍵字const,例如,

[cpp]view plain

copy

class

screen ;  

在類體之外定義const成員函式時,還必須加上const關鍵字,例如

[cpp]view plain

copy

char

screen::get() 

const  

若將成員成員函式宣告為const,則該函式不允許修改類的資料成員。例如,

[cpp]view plain

copy

class

screen   

interror(intival) 

const

};  

在上面成員函式的定義中,ok()的定義是合法的,error()的定義則非法。

值得注意的是,把乙個成員函式宣告為const可以保證這個成員函式不修改資料成員,但是,如果據成員是指標,則const成員函式並不能保證不修改指標指向的物件,編譯器不會把這種修改檢測為錯誤。例如,

[cpp]view plain

copy

class

name ;  

void

setname(

const

string &s) 

const  

雖然m_name不能被修改,但m_sname是char *型別,const成員函式可以修改其所指向的字元。

const成員函式可以被具有相同引數列表的非const成員函式過載,例如,

[cpp]view plain

copy

class

screen ;  

在這種情況下,類物件的常量性決定呼叫哪個函式。

[cpp]view plain

copy

const

screen cs;  

screen cc2;  

char

ch = cs.get(0, 0);  

// 呼叫const成員函式

ch = cs2.get(0, 0);     // 呼叫非const成員函式

小結:1)const成員函式可以訪問非const物件的非const資料成員、const資料成員,也可以訪問const物件內的所有資料成員;

2)非const成員函式可以訪問非const物件的非const資料成員、const資料成員,但不可以訪問const物件的任意資料成員;

3)作為一種良好的程式設計風格,在宣告乙個成員函式時,若該成員函式並不對資料成員進行修改操作,應盡可能將該成員函式宣告為const 成員函式。

抽象類和介面的區別 精華版

抽象類 1.如果乙個函式沒有方法體,那麼該函式必須要使用abstract修飾,把該函式修飾成抽象 的函式。2.如果乙個類出現了抽象的函式,那麼該類也必須 使用abstract修飾。3.如果乙個非抽象類繼承了抽象類,那麼必須要把抽象類的所有抽象方法全部實現。4.抽象類可以存在非抽象方法,也可以存在抽象...

卓越領導者的智慧型 精華版

更多詳情 卓越領導者的智慧型 精華版 內容簡介 經濟管理學書籍 卓越領導者的智慧型 精華版 以領導觀念作為邏輯起點,漸次展開研究了卓越領導者的素質 原理 用權智慧型 用人智慧型 用 勢 智慧型 危機領導智慧型 溝 通領導智慧型 點 的領導智慧型 圓 的領導智慧型 正職的領導智慧型 副職的領導智慧型和...

C 的const類成員函式

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