C 理解(3) C 中類的靜態成員變數

2021-10-19 22:44:01 字數 1457 閱讀 6865

c++理解(3)–c++中類的靜態成員變數

問題:統計在程式執行期間某個類的物件的數目

保證程式的安全性(不能使用全域性變數)

隨時可以獲取當前物件的數目

這裡有個錯誤的示範:

#include

class

test

~test()

intgetcount()

};test gtest;

//乙個全域性物件

intmain()

結果:

count =

1count =

1count =

1

可以發現這個結果不是3。具體原因在於每乙個物件都有自己的變數位址,但是變類量是共享的。因此他是不會累加的。

下面我們把變數定義為全域性變數

#include

int gcount;

class

test

~test()

intgetcount()

};test gtest;

//乙個全域性物件

intmain()

結果:

count =

3count =

3count =

3

結果是沒錯的。但是全域性變數是不大安全的,容易被其他東西呼叫。因此使用靜態變數static

靜態成員變數屬於整個類所有

靜態成員的生命週期不依賴於任何物件(程式包執行的整個週期)

可以通過類名直接訪問共有靜態成員變數

所有物件共享類的靜態成員變數

可以通過物件名訪問公有靜態成員變數

編寫新的**:

#include

class

test

~test()

intgetcount()

};int test::ccount =0;

//這裡是為什麼?

test gtest;

intmain()

結果:

count =

3count =

3count =

3count =

4count =

3

上述既滿足統計物件的數目還有安全性。但是注意static是載入類的時候過載一次的。

由以上分析得出靜態成員變數的幾條特性:

在定義時直接通過static關鍵字修飾

靜態成員變數需要在類外單獨分配空間

靜態成員變數在程式內部位於全域性資料區(但是檔案間無法共享)

靜態成員變數 類 C

if 0 如何訪問靜態成員 四種用法 1 rectangle printtotal 2 rectangle r r.printtotal 3 rectangle p r p printtotal 4 rectangle ref r int n ref.ntotalnumber p printtota...

C 類的靜態成員變數

include using namespace std class rect rect static intgetcount private int width int length static int count 靜態成員變數count來計數 int rect count 0 取消注釋才不會編譯...

C 之我見 類靜態成員變數

在c 中,類的靜態成員變數是屬於整個類的而非某個特定物件。靜態成員變數只儲存乙份供所有物件共用,即在所有物件中都可以共享它。使用靜態成員變數實現多個物件之間的資料共享 不會破壞隱藏的原則,保證了安全性還可以節省記憶體。靜態成員變數的定義或者宣告需要加關鍵字static。靜態成員可以通過雙冒號來引用,...