c 類中的const成員

2021-09-06 11:30:27 字數 2995 閱讀 4358

const成員變數

舉個例子

#include using

namespace

std;

classa;

private

:

const

intsize;

};int

main()

說明

但是

此時的const變數屬於具體的乙個物件,如何在整個類中都恆定不變呢?

答案是利用列舉,舉例

#include using

namespace

std;

classa;

public

:

intarray[size];

};int

main()

列舉常量不會佔據物件的儲存空間,在編譯時被全部求值

但是,它隱含的資料物件型別為整形,不能表示其他型別。

問題

如何定義在類中定義非整形常量?(待解決)

話說有幾個地方必須在建構函式的初始化列表中(詳見):

類的const常量

類的引用型別成員

沒有預設建構函式的類型別成員

如果類存在繼承關係,派生類必須在其初始化列表中呼叫基類的建構函式

const成員函式

任何不修改資料成員的函式都應該宣告為const型別。如果在編寫const成員函式時,不慎修改了資料成員,或呼叫了其他非const成員函式,編譯器就會指出錯誤。

示例說明

#include using

namespace

std;

class

stack

;int stack::getcount(void) const

同乙個類中,可以僅通過是否是const定義兩個函式名字、引數、返回值完全相同的兩個成員函式,例如:

#include using

namespace

std;

class

a

void print_val()

void print_val() const

private

:

intval;

};int main(int argc ,char **argv)

輸出

結論

同函式名、引數、返回值可以僅通過是否為const來定義為類的兩個成員函式。在呼叫時,const物件呼叫const成員函式,非const物件呼叫非const成員函式。

問題1:

不可以在const函式中改變成員變數的值,那麼有沒有辦法改變?

答案是可以的,把成員變數宣告為mutable型別。看程式

#include 

using

namespace

std;

class

a

void print_val()

void print_val() const

private

: mutable

intval;

};int main(int argc ,char **argv)

結果

問題2:

當類中只有const函式,非const物件是否可以呼叫const函式?

答案是可以的,程式

#include 

using

namespace

std;

classa//

void print_val()

void print_val() const

private

: mutable

intval;

};int main(int argc ,char **argv)

結果

但是:還有非const函式時,非const物件不可以調研那個const函式(否則,類的資料變數就會發生變化)。

問題3:

當類中存在只有 是否為const 不同的兩個函式時,const函式是否可以暫時呼叫那個非const函式?

答案是可以的。用const_cast將轉化掉表示式的const性質

#include using

namespace

std;

class

a

void print_val()

void

const print_val() const

private

:

intval;

};int main(int argc ,char **argv)

結果

注意

單純用類轉化不行

const a a(45

);const_cast

a.print_val();

報錯

問題4:返回型別是const是怎麼回事?

const返回型別只有在修飾指標或引用是才有用。單憑const返回型別不可以過載。

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

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

C 類中const成員變數的賦值

在標頭檔案的類的定義中定義了乙個const成員變數 c 規則 1 類定義中不能進行初始化,因為標頭檔案中類的定義只是乙個宣告,並沒有分配真正空間,因此變數是不存在的,因此是不能賦值的。2 const 定義的變數是不能賦值 這可如何是好,宣告中不能賦值,宣告完還不能賦值。又不能不賦值。解決方案 1 在...

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

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