一、static 成員變量
對於特定類型的全體對象而言,有時候可能需要訪問一個全局的變量。比如說統計某種類型對象已創建的數量。
如果我們用全局變量會破壞數據的封裝,一般的用戶代碼都可以修改這個全局變量,這時可以用類的靜態成員來解決這個問題。
非static數據成員存在於類類型的每個對象中,static數據成員獨立該類的任意對象存在,它是與類關聯的對象,不與類對象關聯。
(1)、static成員的定義
static成員需要在類定義體外進行初始化與定義
(2)、特殊的整型static const成員
整型static const成員可以在類定義體中初始化,該成員可以不在類體外進行定義
static成員變量不能在構造函數初始化列表中初始化,因爲它不屬於某個對象
(3)、static成員優點:
static成員的名字是在類的作用域中,因此可以避免與其它類成員或全局對象名字衝突。
可以實施封裝,static成員可以是私有的,而全局對象不可以
閱讀程序容易看出static成員與某個類相關聯,這種可見性可以清晰地反映程序員的意圖
二、static 成員函數
static成員函數沒有隱含的this指針
非靜態成員函數可以訪問靜態成員
靜態成員函數不可以訪問非靜態成員(實際上是直接訪問是不可以的,間接地訪問是可以的,比如通過類指針或類引用)
三、類/對象大小計算
類大小計算遵循前面學過的結構體對齊原則
類的大小與數據成員有關與成員函數無關(空類大小爲1個字節)
類的大小與靜態數據成員無關
虛函數對類的大小的影響
虛繼承對類的大小的影響