C++學習筆記 const修飾類成員與成員函式
阿新 • • 發佈:2021-07-13
一、 常資料成員
常資料成員,已經初始化就不可以改變
1 const int m; //const 資料型別 資料成員名 2 int const s; //資料型別 const 資料成員名
被const修飾的成員必須進行初始化,並且不能被更改。而初始化的方式則是在類的建構函式的初始化列表裡進行的。
1 class Clock 2 3 4 Clock(int a,int b,int c):h(a),m(b),s(c)//類的建構函式的初始化列表
通常把常資料成員定義為靜態成員,使其成為類的一個常量
1 private: static const int x; //靜態常量類內申明,類外初始化
其中x為static型別,因其靜態化的特殊性,需要在類外初始化,即便為私有型別;
二,常成員函式
const成員函式可以使用類中的所有成員變數,但是不能修改他們的值,這種措施主要為了保護資料而設定。const成員函式也稱常成員函式。
需要在宣告和定義的時候在函式頭部的結尾加上const關鍵字
1 char *getname() const; 2 int getage() const; 3 float getscore() const;
常成員函式只能呼叫常成員函式,而不能呼叫非常成員函式,訪問但不可以更改非常成員變數。
注意:但是有一種情況例外,如果成員申明時加關鍵字mutable後,在常函式中依然可以修改
三,常物件
常物件是指該物件在其生命週期內,其所有的資料成員的值都不能被改變;定義物件時加上關鍵字const,該物件就是常物件,其一般形式如下:
1 const class object(params); 2 class const object(params); 3 4 5 //定義const指標 6 const class *p = new class(params); 7 class const *p = new class(params);
一旦將物件定義為常物件之後,不管是哪種形式,該物件就只能訪問被 const 修飾的成員了(包括 const 成員變數和 const 成員函式),因為非 const 成員可能會修改物件的資料(編譯器也會這樣假設),C++禁止這樣做。
資料成員 | 非const的普通成員函式 | const成員函式 |
---|---|---|
非const的普通資料成員 | 可以引用,也可以改變值 | 可以引用,但不可以改變值 |
const資料成員 | 可以引用,但不可以改變值 | 可以引用,但不可以改變值 |
const物件 | 不允許 | 可以引用,但不可以改變值 |
注意:1,不要誤認為常物件中的成員函式都是常成員函式,常物件只保證其所有資料成員的值不被修改
2,如果在常物件中成員函式未加const宣告,則編譯系統會把它當最非const成員函式處理
3,常成員函式不能呼叫另外一個非const成員函式