標誌:都會加上static
靜態成員分為:
1.靜態成員變數
1.1 所有的物件共享同乙份資料,都可以對其做出永久性修改
1.2 在編譯階段分配記憶體
1.3 類內宣告,類外初始化
2.靜態成員函式初始化語法:
int person::a=0; //意思就是把person類中的a初始化為零
2.1所有物件共享同乙個函式
2.2在編譯階段分配記憶體
2.3 靜態成員函式只能訪問靜態成員變數(他不能訪問非靜態成員變數的原因可以從兩個角度去理解:1.因為他是在編譯階段就分配記憶體,這時候還沒有非靜態成員變數的記憶體,他沒辦法訪問。2.非靜態成員變數名字都相同,編譯器不知道訪問哪個。)
2.4類的靜態成員函式是屬於整個類而非類的物件,所以它沒有this指標,這就導致 了它僅能訪問類的靜態資料和靜態成員函式。
2.5不能將靜態成員函式定義為虛函式,(經過實驗,static可能會將虛函式的屬性去掉,從而讓我們父類中設定的虛函式變成擺設,通過指向子類物件的父類指標呼叫的時候會有體現,可以自己試一試)
2.6由於靜態成員函式沒有this指標,所以就差不多等同於nonmember函式,結果就 產生了乙個意想不到的好處:成為乙個callback函式,使得我們得以將c++和c-based x w indow系統結合,同時也成功的應用於執行緒函式身上。
示例一:靜態成員變數
class
person
;int person::m_a =10;
//不要忘了加上作用域
int person::m_b =10;
void
test01()
intmain()
示例二:靜態成員函式
class
person
static
int m_a;
//靜態成員變數
int m_b;
// private
://靜態成員函式也是有訪問許可權的
static
void
func2()
};int person::m_a =10;
void
test01()
intmain()
c 類的靜態函式和靜態成員
static資料成員 靜態資料成員儲存在全域性資料區,靜態資料成員定義時要分配空間,所以不能在類宣告中定義。應該在類外定義。靜態資料成員和普通資料成員一樣遵從public private protected訪問規則。由於靜態資料成員在全域性資料區分配記憶體,屬於本類的所有物件共享,它不屬於特定的類物...
c 靜態函式和靜態成員
靜態函式 在類內宣告static,在類外定義時不能再用static,靜態函式可以訪問類的靜態物件。靜態物件 靜態物件不屬於任何乙個物件,所以他們並不是在建立類的物件時被定義的,也就是不能被建構函式初始化。要想定義全域性變數一樣定義靜態物件。生命週期和全域性變數一樣。通常,為了防止物件多次定義,最好把...
C 靜態成員 靜態資料成員和靜態函式成員
由關鍵字static修飾說明的類成員,成為靜態類成員 static class member 包括 靜態資料成員和靜態函式成員。類的靜態成員為其所有物件共享,不管有多少物件,靜態成員只有乙份存於公用記憶體中。雖然使用static修飾說明,但與函式中的靜態變數有明顯差異。在類定義中,用關鍵字stati...