一、常物件說明:常物件是指物件的資料成員的值在物件被呼叫時不能被改變。常物件必須進行初始化,且
能被更新。不能通過常物件呼叫普通成員函式,但是可以通過普通物件呼叫常成員函式。常物件只能呼叫常成員函式。常物件的宣告如下:
const 《類名》 《物件名》
《類名》 const 《物件名》
兩種宣告完全一樣沒有任何區別。
1、通過下面例子來理解常物件:
a、請指出下面程式的錯誤
複製**
**如下:
class a
int getw()
void setwh(int x,int y)
a(int x,int y)
a()//本例中不能省略
};void main()
{
a a;//非常物件可以不初始化
a.setwh(3,9);
a const b; //常物件必須宣告的同時初始化,正確的是 a const b(3,6)。
b.setwh(3,7); // 假如上面改正後用這一句,還是錯誤應為b是常物件不能呼叫非常成員函式,切其值呼叫時不能改變,setwh()
cout<< a.getarea()<
二、常成員變數
c++中使用const關鍵字修飾的成員變數就是常成員變數,有兩種定義方式:
const int c;
int const c;
需要注意的是:
1)任何函式都不可以對其值進行賦值和修改;
2)必須而且只能在建構函式的成員初始化列表中對其進行初始化;
3)假如類有多個建構函式,必須在所有的建構函式中都對其進行初始化。
三、常成員函式
前面已提到,一般的成員函式可以引用本類中的非const資料成員,也可以修改它們。如果將成員函式宣告為常成員函式,則只能引用本類中的
資料成員,而不能修改它們,例如只用於輸出資料等。如
void get_time( ) const ; //注意const的位置在函式名和括號之後
const是函式型別的一部分,在宣告函式和定義函式時都要有const關鍵字,在呼叫時不必加const。常成員函式可以引用const資料成員,也可以
引用非const的資料成員。const資料成員可以被const成員函式引用,也可以被非const的成員函式引用。具體情況可以用表9.1表示。
資料成員
非const成員函式
const成員函式
非const的資料成員
可以引用,也可以改變值
可以引用,但不可以改變值
const資料成員
可以引用,但不可以改變值
可以引用,但不可以改變值
const物件的資料成員
不允許可以引用,但不可以改變值
那麼怎樣利用常成員函式呢?
1.如果在乙個類中,有些資料成員的值允許改變,另一些資料成員的值不允許改變,則可以將一部分資料成員宣告為const,以保證其值不被改
變,可以用非const的成員函式引用這些資料成員的值,並修改非const資料成員的值。
2.如果要求所有的資料成員的值都不允許改變,則可以將所有的資料成員宣告為const,或將物件宣告為const(常物件),然後用const成員函式
引用資料成員,這樣起到「雙保險」的作用,切實保證
3.如果已定義了乙個常物件,只能呼叫其中的const成員函式,而不能呼叫非const成員函式(不論這些函式是否會修改物件中的資料)。這是為了
保證資料的安全。如果需要訪問物件中的資料成員,可將常物件中所有成員函式都宣告為const成員函式,但應確保在函式中不修改物件中的數
據成員。
不要誤認為常物件中的成員函式都是常成員函式。常物件只保證其資料成員是常資料成員,其值不被修改。如果在常物件中的成員函式未加
const宣告,編譯系統把它作為非const成員函式處理。
還有一點要指出,常成員函式不能呼叫另乙個非const成員函式。
C 之常物件,常物件成員
一.常物件 1.常物件定義 time const t1 1,2,3 或者const time t1 2.常物件不能呼叫該物件的非const型的成員函式 系統主動呼叫的構造析構函式除外 3.常成員函式的宣告方法,後面加個const即可 void get time const 4.常物件不能修改物件內的...
C 中常物件 常成員函式 常成員變數
用const修飾的類物件叫做常物件,用const修飾的成員函式叫常成員函式,用const修飾的成員變數叫常成員變數,常物件 型如 const 類名 物件名 類名 const 物件名 說明 1.常物件內的成員變數值不可修改,所以一定要在定義物件時初始化。2.常物件只可以呼叫常成員函式,但是非常物件可以...
C 之常物件,常成員物件,常成員函式,常指標
一 常物件 time const t1 12,23,23 其中所有的值不能被修改。通過該物件只能呼叫它的常成員函式,而不能呼叫它的普通成員函式。以防普通成員函式會修改資料成員的值。但如果一定要修改常物件資料成員的值,可以將該資料成員宣告為mutable,如 mutable int count 把co...