const成員變數

2021-06-30 16:12:06 字數 3006 閱讀 7829

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++/c

const 成員變數

class mytestclass public const int m ciint const string m csstr static int m siint static string m ssstr const static int m csiint const static string...

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

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

static與const成員變數

static 很多公司會喜歡問static的作用是什麼,如果不考慮在類當中的應用,其主要作用有以下三點 1 隱藏 加了static的全域性變數,在其他原始檔中就 看不見 了。也就是說,加了static,可以用來解決不同檔案裡定義了同名的函式或者變數。2 預設初始化為0 對於未初始化的全域性變數和靜態...