定義常物件的作用是為了保證該物件中資料成員的值不能被修改。
定義常物件的一般形式為
類名 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 陣列名 大小 常指標 常型別定義一定是一行定義,一次性初始化,...