類中的常量, const物件和成員函式

2022-05-13 15:01:00 字數 1109 閱讀 8903

常量

起初讀者可能認為合乎邏輯的選擇是把乙個const放在類裡,但這不會產生預期的結果。在乙個類裡,const 恢復它在c中的一部分意思。

它在每個類物件裡分配儲存並代表乙個值,這個值一旦被初始化以後就不能改變。在乙個類裡使用const的意思是「在這個物件宣告期內,這個是乙個常量」。

然而,對這個常量來講,每個不同的物件可以含乙個不同的值。

把乙個內部資料型別封裝在乙個類裡以保證用建構函式初始化,是很用的。

例如

class interger

;integer::integer(int i):i(i){};

現在,如果建立乙個integer陣列,他們都被自動初始化為零。

interger[100]; 與for迴圈和memset()相比,這種初始化不必付出更多哦的開銷。很多編譯器可以很容易地把他優化成乙個很快的過程。

因為在類物件裡進行了儲存空間分配,編譯器不能知道const的內容是什麼,所以不能把它用作編譯期間的常量。

class bunch

;int i[size];

};

使用enum是不會占用物件中的儲存空間的,列舉常量在編譯時被全部求值。

const物件和成員函式

const blob b(2);

由於編譯器強調物件為const,因此它必須保證物件的資料成員在物件的壽命期內不能被改變。可以很容易地保證公有資料不能被改變,但是怎麼知道哪個成員函式會改變資料,又怎麼知道哪個成員函式對與const物件是「安全」的呢

如果宣告乙個成員函式為const函式,則等於告訴編譯器可以為乙個const物件呼叫這個函式。乙個沒有特別宣告為const的成員函式被看成是將要修改物件中資料成員的函式,而且編譯器不允許為乙個const物件呼叫這個函式。

必須在定義和宣告中加入const.

如果乙個物件被定義成乙個const物件,它就被放進唯讀儲存器(rom)中的乙個候選,在標頭檔案裡,內聯函式預設為內部連線--即它是static,並且只能在它被包含的編譯單元看到。因此,只要他們不在相同的編譯單元中宣告,在內聯函式和全域性函式之間用同樣的名字也不會在鏈結時產生衝突。

C 中const成員函式和const物件

一 c 中函式和物件 1.const資料成員 跟const常量一樣,只是乙個在類裡 而且是在建構函式裡 乙個在類外而已,都必須初始化。2.const成員函式 即普通成員函式後再加const。它可以讀取資料成員的值,但不能修改它們。若要修改 時,資料成員前必須加mutable。以指定其可被任意更改。m...

C 中類的const成員函式和const物件

2.const成員函式 即普通成員函式後再加const。它可以讀取資料成員的值,但不能修改它們。若要修改 時,資料成員前必須加mutable。以指定其可被任意更改。mutable是ansic 考慮到實際程式設計時,可能一定要修改const物件中的某個資料成員而設的。const成員函式可以被相同參數列...

C 類和物件 const修飾成員函式

常函式 常物件 include using namespace std class person mutable int m age 特殊變數,加關鍵字mutable,即使在常函式中也可以修改這個值 void test1 intmain include using namespace std cla...