十一 類的靜態成員

2021-07-05 15:02:28 字數 1249 閱讀 6114

成員變數的回顧

通過物件名能夠訪問public成員變數

每個物件都可以有屬於自己的成員變數

成員變數不能在物件之間共享

新的需求

統計類的程式執行期間有多少個物件同時存在

保證程式的安全性,並隨時可以獲取物件的數目

問題:使用普通的成員變數可行嗎?

類的靜態成員

在c++中可以定義靜態成員變數和靜態成員函式

靜態成員屬於整個類所有,不需要依賴任何物件

可以通過類名直接訪問public靜態成員

可以通過物件名訪問public靜態成員

靜態成員函式可以直接訪問靜態成員變數

靜態成員變數的定義

在定義時直接通過static關鍵字修飾

靜態成員變數不依賴於任何物件,需要在類外單獨分配空間

語法規則:type classname::varname

靜態成員函式的定義

在定義是直接通過static關鍵字修飾

其餘部分與普通成員函式定義相同

(插入11-1.cpp)

從命名空間的角度

類的靜態成員只是類這個命名空間中的全域性變數和全域性函式

不同之處只是,類可以對靜態成員進行訪問許可權的設定,而命名空間不行

從物件導向的角度

類的靜態成員屬於類概念本身

類的所有物件共享相同的靜態成員

(插入11-2.cpp)

思考:靜態成員函式和普通成員函式有什麼區別?

答案:靜態成員函式不包含指向具體物件的指標

c++物件模型初探

(插入11-3.cpp)

c++類物件中的成員變數和成員函式是分開儲存的

成員變數

普通成員變數:儲存於物件中,與struct變數有相同的記憶體布局和位元組對齊方式

靜態成員變數:儲存於全域性資料區

成員函式  

儲存於**段中

c++中的class從物件導向理論出發,將變數和函式集中定義在一起,用於描述顯示世界中的類

從計算機的角度,程式依然由資料段和**段構成

c++編譯器如何完成物件導向理論到電腦程式的轉化?

思考:靜態成員函式和普通成員函式有什麼區別?

答案:靜態成員函式不包含指向具體物件的指標

普通成員函式包含乙個指向具體物件的指標

c++中類的普通成員函式都隱式包含乙個指向當前物件的this指標。

靜態成員與非靜態成員的區別?

(插入11-3.cpp)與前面的(插入11-3.cpp)有可能衝突

靜態成員 靜態成員函式

reference to non static member function must be called sort numbers.begin numbers.end cmp 做演算法題的時候遇到的乙個問題,和成員函式相關,這裡記錄一下備忘。首先上 class solution string p...

Delphi的學習筆記十一 類4

1.類的方法引數可以分為四種 預設引數 傳值 var 傳址 out 輸出 const 常數 這裡需要注意的是var定義的引數,例如 function myf2 var x integer integer begin inc x result x end 對於out 輸出 其用法和var一致,所以在一...

C 複習之路十一 類的繼承

一 複習三種訪問控制符 public 修飾的成員變數或者方法,可以在類的外部或者類的內部使用 private 修飾的成員變數或者方法,只能在類的內部使用,外部不能使用 protected 修飾的成員變數或者方法,只能在類的內部或者子類內部使用,不能在類的外部使用 這三種訪問控制符可以修飾類的成員屬性...