C 靜態成員 2 靜態資料成員

2021-07-02 19:17:26 字數 1212 閱讀 8170

目錄

1.靜態成員的構造

2.靜態成員的訪問

3.靜態成員的初始化

#include class a

};class b

};int main()

輸出:

b's constructor called

結論:程式只呼叫了b的建構函式,而沒有呼叫a的建構函式。原因很簡單,靜態成員僅僅在類宣告的時候而宣告,但是不會定義。它們必須在類的外邊被顯示地定義。

如果訪問這個沒有被顯式定義的靜態成員'a', 編譯會失敗。見下面例子。

#include using namespace std;

class a

};class b

static a geta()

};int main()

編譯失敗,輸出:

compiler error: undefined reference to `b::a' 

如果新增了對『a』的定義後,程式可以正常執行,並呼叫a的建構函式。

#include class a

};class b

static a geta()

};a b::a; // 對a進行定義

int main()

輸出:a's constructor called

b's constructor called

b's constructor called

b's constructor called

從上面的執行結果看到:

1. a的建構函式先於b的建構函式被呼叫,因為它是靜態成員。

2. 上述程式呼叫了3次b的建構函式,而只呼叫了1次a的建構函式。這是因為靜態成員是在所有物件間共享的。這也是為何說它們都是類級別的或類作用域的。

3. 另外,靜態成員可以不需要用任何物件來訪問。下面例子中靜態成員'a'不需要依靠任何物件進行訪問。

#include class a

};class b

static a geta()

};a b::a; // a的定義

int main()

輸出:

a's constructor called

C 靜態成員 靜態資料成員和靜態函式成員

由關鍵字static修飾說明的類成員,成為靜態類成員 static class member 包括 靜態資料成員和靜態函式成員。類的靜態成員為其所有物件共享,不管有多少物件,靜態成員只有乙份存於公用記憶體中。雖然使用static修飾說明,但與函式中的靜態變數有明顯差異。在類定義中,用關鍵字stati...

C 靜態成員函式和靜態資料成員

當將類的某個資料成員宣告為static時,該靜態資料成員只能被定義一次,而且要被同類的所有物件共享。各個物件都擁有類中每乙個普通資料成員的副本,但靜態資料成員只有乙個例項存在,與定義了多少類物件無關。靜態方法就是與該類相關的,是類的一種行為,而不是與該類的例項物件相關。靜態資料成員的用途之一是統計有...

C 靜態資料成員與靜態成員函式

一般情況下,如果有n個同類的物件,那麼每乙個物件都分別有自己的資料成員,不同物件的資料成員各自有值,互不相干。但是有時人們希望有某乙個或幾個資料成員為所有物件所共有,這樣可以實現資料共享。可以使用全域性變數來達到共享資料的目的。例如在乙個程式檔案中有多個函式,每乙個函式都可以改變全域性變數的值,全域...