C 之常物件 常成員變數與常成員函式詳解

2021-07-27 15:33:06 字數 1982 閱讀 6965

一、常物件說明:常物件是指物件的資料成員的值在物件被呼叫時不能被改變。常物件必須進行初始化,且

能被更新。不能通過常物件呼叫普通成員函式,但是可以通過普通物件呼叫常成員函式。常物件只能呼叫常成員函式。常物件的宣告如下:

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...