C C ,常物件 保護共享資料

2021-07-13 07:48:55 字數 2463 閱讀 6631

定義常物件的作用是為了保證該物件中資料成員的值不能被修改。

定義常物件的一般形式為

類名 const 物件名 [(實參表)];
或者

const 類名 物件名 [(實參表)];
#include 

using namespace std;

class student

void change(int n, float s)

void display()

private:

int num;

float score;

};int main()

修改上述原始檔,將 s 宣告為常物件:

#include 

using namespace std;

class student

void change(int n, float s)

void display()

private:

int num;

float score;

};int main()

編譯結果:

通過編譯時提示的錯誤資訊可知:常物件不能呼叫該物件的普通成員函式。

這是為了防止普通成員函式會修改物件中資料成員的值。

修改上述原始檔,將 s 的成員函式宣告為常成員函式:

#include 

using namespace std;

class student

void change(int n, float s) const

void display() const

private:

int num;

float score;

};int main()

編譯結果:

對比第二次編輯時提示錯誤資訊可知:常物件可以呼叫它的常成員函式,但是不能修改常物件中資料成員的值。

修改上述原始檔,將常物件中的資料成員宣告為mutable:

#include 

using

namespace

std;

class student

void change(int n, float s) const

void display() const

private:

mutable

int num;

mutable

float score;

};int main()

編譯執行結果:

通過編譯執行結果可知:如果想要修改常物件中某個資料成員的值,則需要將該資料成員宣告為mutable。

結合以上測試結果,可得出以下結論:

如果將乙個物件宣告為常物件,則該物件只能呼叫它的常成員函式,而不能呼叫該物件的普通成員函式;

常成員函式可以訪問常物件中的資料成員,但不允許修改常物件中資料成員的值;

常成員函式可以修改宣告為mutable(可變的)資料成員的值。

修改初始原始檔,定義指向常物件的指標變數:

#include 

using namespace std;

class student

void change(int n, float s)

void display()

private:

int num;

float score;

};int main()

編譯結果:

通過編譯時提示的錯誤資訊可知:如果定義了乙個指向常物件的指標變數,並使它指向乙個非const的物件,則其指向的物件不能通過該指標變數改變。

修改上述原始檔,定義指向物件的常指標變數:

#include 

using namespace std;

class student

void change(int n, float s)

void display()

private:

int num;

float score;

};int main()

C 共享資料的保護(常物件,常成員,常引用)

1 常物件 必須進行初始化並且不能被修改。class fun private int x const fun funa 2 2 常成員函式 型別說明符 函式名 參數列 const 1 在函式的定義部分也要帶上const關鍵字。2 如果乙個物件是常物件,那麼常物件只能呼叫常成員函式,不可以呼叫其他函式...

C C 資料的共享與保護

當程式中遇到常量時 如果程式複雜,用到的常量比較多的化,不能很簡單的看出某個常量時用來做什麼的。在實際中應該盡量避免產生這種magic number,可以使用c語言提供的預定義功能 define pi 3.14 auto f double radius 預定義有自己的侷限 比如不能進行型別檢查 更好...

C 共享資料型別的保護(常型別)

常型別 常引用 被引用的物件不能被更新。const 型別說明符 引用名 常物件 必須進行初始化,不能被更新。類名 const 物件名 常成員函式 型別說明符 函式名 參數列 const 常陣列 陣列元素不能被更新 型別說明符 const 陣列名 大小 常指標 常型別定義一定是一行定義,一次性初始化,...