const修飾變數一般有兩種方式:const t *a,或者t const *a,這兩者都是一樣的,主要看const位於*的左邊還是右邊,這裡不再贅述,主要來看一下當const修飾類的成員函式時,成員函式有什麼特點。
類的成員函式後面加 const ,表面這個函式不會對這個類物件的資料成員(準確的說是非靜態資料成員)作任何改變。
在設計類的時候,乙個原則就是對於不改變資料成員的成員函式都要在後面加const,而對於改變資料成員的成員函式不能加const。所以const關鍵字對成員函式的行為作了更加明確的限定:
1.有const修飾的成員(指 const 放在函式引數表的後面,而不是在函式前面或者參數列內),只能讀取資料成員,不能改變資料成員;
2.在類的成員函式後面加 const 還有什麼好處,那就是常量(即const)物件可以呼叫const成員函式,而不能呼叫非const 成員函式。
1int myfun(void) const
//const修飾的是成員函式
2 {}//
函式內部不能修改 普通成員變數 mutable修飾時例外
1class
data219
20data()
2124 data(int
data)
2529 data(const data &ob)
3034 ~data()
3538
};39
void
test02()
40
classdata
//編譯器認為 普通成員函式 存在修改成員變數 可能
void setdata(int data) const
data()
data(
intdata)
data(
const data &ob)
~data()
};void
test03()
1)const成員函式可以訪問非const物件的非const資料成員、const資料成員,也可以訪問const物件內的所有資料成員;
2)非const成員函式可以訪問非const物件的非const資料成員、const資料成員,但不可以訪問const物件的任意資料成員;
3)作為一種良好的程式設計風格,在宣告乙個成員函式時,若該成員函式並不對資料成員進行修改操作,應盡可能將該成員函式宣告為const 成員函式。
4)如果只有const成員函式,非const物件是可以呼叫const成員函式的。當const版本和非const版本的成員函式同時出現時,非const物件呼叫非const成員函式。
const int num = 10;//系統不會給num開闢空間 num被放入符號表中 如果後期對&num 這時系統才會給num開闢空間
const修飾類的成員函式
effective c 裡面說,盡量使用const,const修飾變數一般有兩種方式 const t a,或者 t const a,這兩者都是一樣的,主要看const位於的左邊還是右邊,這裡不再贅述,主要來看一下當const修飾類的成員函式時,成員函式有什麼特點。類的成員函式後面加 const,表明...
C 類和物件 const修飾成員函式
常函式 常物件 include using namespace std class person mutable int m age 特殊變數,加關鍵字mutable,即使在常函式中也可以修改這個值 void test1 intmain include using namespace std cla...
const修飾成員函式
1 常量限定修飾符,它把乙個物件轉換為常量 constant const物件必須初始化而且是在定義的同時。初始化後的const物件 或指標 是不能修改的。2 修飾成員函式 const類物件只能呼叫const成員函式,不能呼叫普通成員函式 const成員函式不能修改類的成員變數,若要修改則用mutab...