1. 程式人生 > 其它 >C++學習筆記 const修飾類成員與成員函式

C++學習筆記 const修飾類成員與成員函式

一、 常資料成員

常資料成員,已經初始化就不可以改變

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成員函式