const成員函式

2021-07-02 01:43:07 字數 2057 閱讀 3985

我們知道,在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 成員函式。

const成員函式

prime c 在類sales item中,same isbn函式定義如下 bool sales item same isbn const sales item rhs const const 成員函式的引入 跟在 sales item 成員函式宣告的形參表後面的 const 所起的作用了 cons...

const成員函式

一.關於const成員函式的呼叫 const物件只能呼叫const成員函式 cpp view plain copy include using namespace std class a void fun intmain 輸出 const 成員函式 但是如果把第以1個fun注釋掉就會出錯 error...

const成員函式

在c 中,若乙個變數宣告為const型別,則試圖修改該變數的值的操作都被視編譯錯誤.例如 const int a 1 a 2 錯誤 c 的const類成員函式 物件導向程式設計中,為了體現封裝性,通常不允許直接修改類物件的資料成員。若要修改類物件,應呼叫公有成員函式來完成。為了保證const物件的常...