c 類的靜態成員(靜態函式和靜態變數)

2021-10-12 09:59:54 字數 1308 閱讀 9014

標誌:都會加上static

靜態成員分為:

1.靜態成員變數

1.1 所有的物件共享同乙份資料,都可以對其做出永久性修改

1.2 在編譯階段分配記憶體

1.3 類內宣告,類外初始化

初始化語法:

int person::a=0; //意思就是把person類中的a初始化為零

2.靜態成員函式

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...