C++面向對象 靜態成員和友元

  • 2019 年 11 月 10 日
  • 筆記

第十一章 靜態成員和友元

11.1 靜態成員

1.C++類當中的靜態數據成員仍借用保留字static,但是與之前的靜態全局變數,靜態局部變數以及靜態函數沒有關係。

2.靜態數據成員不佔用具體對象的數據空間。

3.靜態數據成員的創建和銷毀處分權不屬於任何對象。對象有權利讀和寫靜態成員。靜態成員應該在創建任何具體對象之前就可以訪問,所以要求靜態成員在創建類的任何對象

之前就要存在(猶如全局變數、全局對象在main函數前面執行一樣)因此靜態數據成員應該在主函數之前先定義初始化。

4.靜態數據成員不能沒有定義也不能不定義。應該將類的靜態數據成員定義和初始化語句放在類的內部實現源文件當中。

格式為: 數據類型 類名::靜態數據成員名=初始化值;

或者:  數據類型 類名::靜態數據成員名(初始化值);     (在這裡不能再寫保留字static)

5.靜態數據成員的生命期是全局的,與是否創建了對象沒有關係。

6.要訪問靜態數據成員的時候,可以用對象訪問也更一般是用類名訪問。

對象名.靜態數據成員名

類名::靜態數據成員名

7.靜態成員函數的聲明語法格式:  static 返回類型 靜態成員函數名(形式參數表)在類體外定義的時候不能添加保留字static!

8.靜態成員函數可以被該類所有對象所使用,但是注意靜態成員函數沒有隱含傳遞所謂的“本對象地址”的指針形式參數this,只能顯式地傳遞對象作為參數。

 

11.2友元

1.友元不是類的成員。

2.友元分為友元類和友元函數。

3.友元函數在類聲明當中就在前面加一個friend表示函數不是本類成員,而是本類的友元函數。

4.友元函數在處理具體對象的時候需要將對象顯式地傳遞給函數。

4.友元類:聲明一個類是另一個類的友元,成為友元類。友元類當中的所有成員函數都是本類的友元函數,都能夠訪問本類中的所有成員。