在c++中,類的靜態成員(static member)必須在類內宣告,在類外初始化,像下面這樣
class a
; int a::count = 0 ; // 類外初始化,不必再加static關鍵字
為什麼?因為靜態成員屬於整個類,而不屬於某個物件,如果在類內初始化,會導致每個物件都包含該靜態成員,這是矛盾的。
能在類中初始化的成員只有一種,那就是靜態常量成員。
這樣不行
class a
;
這樣也不行
class a
;
但是這樣可以
class a
;
結論:
總結如下表:
型別初始化方式
類內(宣告)
類外(類實現檔案)
建構函式中
建構函式的初始化列表
非靜態非常量資料成員nn
yy非靜態常量資料成員nn
ny (must)
靜態非常量資料成員
ny (must)nn
靜態常量資料成員yy
nn以下三種型別必須通過初始化列表來初始化
1.非靜態 常量
2. 引用型別
3. 沒有預設建構函式的類型別
C 類成員和資料成員初始化總結
c 為類中提供類成員的初始化列表 類物件的構造順序是這樣的 1.分配記憶體,呼叫建構函式時,隱式 顯示的初始化各資料成員 2.進入建構函式後在建構函式中執行一般計算 1.類裡面的任何成員變數在定義時是不能初始化的。2.一般的資料成員可以在建構函式中初始化。3.const資料成員必須在建構函式的初始化...
C 類成員和資料成員初始化總結
c 為類中提供類成員的初始化列表。類物件的構造順序是這樣的 1.分配記憶體,呼叫建構函式時,隱式 顯示的初始化各資料成員 2.進入建構函式後在建構函式中執行一般計算 1.類裡面的任何成員變數在定義時是不能初始化的。2.一般的資料成員可以在建構函式中初始化。3.const資料成員必須在建構函式的初始化...
類的靜態資料成員宣告 定義 初始化
在c 中,類的靜態成員 static member 必須在類內宣告,在類外初始化,像下面這樣。class a int a count 0 類外初始化,不必再加static關鍵字 為什麼?因為靜態成員屬於整個類,而不屬於某個物件,如果在類內初始化,會導致每個物件都包含該靜態成員,這是矛盾的。能在類中初...