通過對象名能夠訪問public成員變量
每個對象都可以有屬於自己的成員變量
成員變量不能在對象之間共享
新的需求
統計類的程序運行期間有多少個對象同時存在
保證程序的安全性,並隨時可以獲取對象的數目
問題:使用普通的成員變量可行嗎?
類的靜態成員
在C++中可以定義靜態成員變量和靜態成員函數
靜態成員屬於整個類所有,不需要依賴任何對象
可以通過類名直接訪問public靜態成員
可以通過對象名訪問public靜態成員
靜態成員函數可以直接訪問靜態成員變量
靜態成員變量的定義
在定義時直接通過static關鍵字修飾
靜態成員變量不依賴於任何對象,需要在類外單獨分配空間
語法規則:Type ClassName::VarName
靜態成員函數的定義
在定義是直接通過static關鍵字修飾
其餘部分與普通成員函數定義相同
(插入11-1.cpp)
從命名空間的角度
類的靜態成員只是類這個命名空間中的全局變量和全局函數
不同之處只是,類可以對靜態成員進行訪問權限的設置,而命名空間不行
從面向對象的角度
類的靜態成員屬於類概念本身
類的所有對象共享相同的靜態成員
(插入11-2.cpp)
思考:靜態成員函數和普通成員函數有什麼區別?
答案:靜態成員函數不包含指向具體對象的指針
C++對象模型初探
(插入11-3.cpp)
C++類對象中的成員變量和成員函數是分開存儲的
成員變量
普通成員變量:存儲於對象中,與struct變量有相同的內存佈局和字節對齊方式
靜態成員變量:存儲於全局數據區
成員函數
存儲於代碼段中
C++中的class從面向對象理論出發,將變量和函數集中定義在一起,用於描述顯示世界中的類
從計算機的角度,程序依然由數據段和代碼段構成
(插入視頻49分鐘處)
C++編譯器如何完成面向對象理論到計算機程序的轉化?
思考:靜態成員函數和普通成員函數有什麼區別?
答案:靜態成員函數不包含指向具體對象的指針
普通成員函數包含一個指向具體對象的指針
C++中類的普通成員函數都隱式包含一個指向當前對象的this指針。
靜態成員與非靜態成員的區別?
(插入11-3.cpp)與前面的(插入11-3.cpp)有可能衝突