十一、類的靜態成員

成員變量的回顧
  通過對象名能夠訪問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)有可能衝突
  
發佈了48 篇原創文章 · 獲贊 3 · 訪問量 2萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章