靜態函式:在類內宣告static,在類外定義時不能再用static,靜態函式可以訪問類的靜態物件。
靜態物件:靜態物件不屬於任何乙個物件,所以他們並不是在建立類的物件時被定義的,也就是不能被建構函式初始化。要想定義全域性變數一樣定義靜態物件。生命週期和全域性變數一樣。
通常,為了防止物件多次定義,最好把靜態物件的定義放在定義檔案,而不是標頭檔案。但是也可以使用const或者constexpr來修飾static在類內定義乙個常數。如果這個常數只是在類內使用,這麼定義沒問題,如果在類外需要使用這個常數,則必須在類內宣告const static,在類外定義這個常數。
最好的做法是在類內初始化,也要在類外定義,但是類外定義不能帶初始值。
靜態物件可以是不完全型別,比如單例模式:
class c
public:
c& get_instance()
};c c::x(1,2,3);//類外初始化
C 靜態成員 靜態資料成員和靜態函式成員
由關鍵字static修飾說明的類成員,成為靜態類成員 static class member 包括 靜態資料成員和靜態函式成員。類的靜態成員為其所有物件共享,不管有多少物件,靜態成員只有乙份存於公用記憶體中。雖然使用static修飾說明,但與函式中的靜態變數有明顯差異。在類定義中,用關鍵字stati...
c 類的靜態函式和靜態成員
static資料成員 靜態資料成員儲存在全域性資料區,靜態資料成員定義時要分配空間,所以不能在類宣告中定義。應該在類外定義。靜態資料成員和普通資料成員一樣遵從public private protected訪問規則。由於靜態資料成員在全域性資料區分配記憶體,屬於本類的所有物件共享,它不屬於特定的類物...
c 類的靜態成員(靜態函式和靜態變數)
標誌 都會加上static 靜態成員分為 1.靜態成員變數 1.1 所有的物件共享同乙份資料,都可以對其做出永久性修改 1.2 在編譯階段分配記憶體 1.3 類內宣告,類外初始化 初始化語法 int person a 0 意思就是把person類中的a初始化為零 2.靜態成員函式 2.1所有物件共享...