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。靜態成員可以通過雙冒號來引用,...