C 之const類成員變數,const成員函式

2021-10-11 11:10:28 字數 2604 閱讀 2199

**

const修飾類的成員函式

const修飾變數一般有兩種方式:const t *a,或者 t const *a,這兩者都是一樣的,主要看const位於*的左邊還是右邊,這裡不再贅述,主要來看一下當const修飾類的成員函式時,成員函式有什麼特點。

類的成員函式後面加 const,表明這個函式不會對這個類物件的資料成員(準確地說是非靜態資料成員)作任何改變。

在設計類的時候,乙個原則就是對於不改變資料成員的成員函式都要在後面加 const,而對於改變資料成員的成員函式不能加 const。所以 const 關鍵字對成員函式的行為作了更加明確的限定:

(1)有 const 修飾的成員函式(指 const 放在函式引數表的後面,而不是在函式前面或者參數列內),只能讀取資料成員,不能改變資料成員;沒有 const 修飾的成員函式,對資料成員則是可讀可寫的。

(2)除此之外,在類的成員函式後面加 const 還有什麼好處呢?那就是常量(即 const)物件可以呼叫 const 成員函式,而不能呼叫非const修飾的函式。

#include

#include

#include

usingnamespacestd;

classa

voidf()const

};

intmain(intargc,char**ar**)

注意:兩個成員函式如果只是常量性不同,是可以被過載的。看下面解釋的第二點:

在c++中,只有被宣告為const的成員函式才能被乙個const類物件呼叫。

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

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

char screen :: get() const
若將成員函式宣告為const,則不允許通過其修改類的資料成員。 值得注意的是,如果類中存在指標型別的資料成員即便是const函式只能保證不修改該指標的值,並不能保證不修改指標指向的物件。例如:

class name ;

void setname(const string &s) const

class screen ;

int main()

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

const成員函式的寫法有兩種

1、void fun(int a,int b) const{}

2、void const fun(int a,int b){}

這兩種寫法的本質是:void fun (const 類 *this, int a,int b);

const修飾的不是形參a和b;const修飾的是屬性this->a和this->b。與const所寫的位置無關。

為什麼?

因為c++對類的this指標做了隱藏,本質上,const指標修飾的是被隱藏的this指標所指向的記憶體空間,修飾的是this指標。

總結:

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

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

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

4)如果只有const成員函式,非const物件是可以呼叫const成員函式的。當const版本和非const版本的成員函式同時出現時,非const物件呼叫非const成員函式。

補充:

> 類中的const成員變數都要放在初始化列表之中進行

> const資料成員

> 引用資料成員

> 物件資料成員(內建類)

const成員函式

> void print() const => const 類名 * const this

> 在其內部是不能修改資料成員

> 只能呼叫const成員函式,不能呼叫非const成員函式

>const物件只能呼叫const成員函式,必須要提供乙個const版本的成員函式

const成員函式和成員變數這一塊的邏輯容易混亂!

C 類的const型別成員變數

includeusing namespace std class myclass 只能在構造函式引數行中對const型別成員變數初始化 不能在建構函式中初始化const型別成員變數 myclass類的建構函式myclass 的輸入引數必須包含 要給const成員變數const varible初始化的...

C 之 const類成員函式

const修飾的變數稱為常變數,不可修改,而const修飾的類成員函式限制為不可修改類的成員,只能讀取。寫法是將const放在函式引數列表後面,而不是放在函式前面或者放入引數列表內 class test 在類體之外定義const函式也需要加const int test getnum const 1....

c 學習之const成員變數與成員函式

常型別是指用型別修飾符const說明的型別,常型別的變數或者物件的值是不能被更新的。因此,定義或說明常型別時必須初始化。如果在乙個類宣告常資料成員,那麼任何函式中都不能對該成員賦值。建構函式對該成員進行初始化,只能通過初始化列表來實現。include using namespace std clas...