17 類的靜態成員變數
阿新 • • 發佈:2020-09-23
目錄
1 成員變量回顧
- 通過物件名能夠訪問
public
成員變數 - 每個物件的成員變數都是專屬的
- 成員變數不能在物件之間共享
2 新的需求
- 統計在程式執行期間某個類的物件數目
- 保證程式的安全性(不能使用全域性變數)
- 隨時可以獲取當前物件的數目
3 方案
-
方案1
-
Demo
#include <stdio.h> class Test { private: int mCount; public: Test() : mCount(0) { mCount++; } ~Test() { --mCount; } int getCount() { return mCount; } }; Test gTest; int main() { Test t1; Test t2; printf("count = %d\n", gTest.getCount()); printf("count = %d\n", t1.getCount()); printf("count = %d\n", t2.getCount()); return 0; }
-
編譯執行
1 1 1
-
-
方案2:靜態成員變數
4 靜態成員變數
-
在 C++中可以定義靜態成員變數
- 靜態成員變數屬於整個類
- 靜態成員變數的生命週期不依賴於任何物件
- 可以通過類名直接訪問公有靜態成員變數
- 所有物件共享類的靜態成員變數
- 可以通過物件名訪問公有靜態成員變數
-
靜態成員變數的特性
- 在定義時直接通過
static
關鍵字修飾 - 靜態成員變數需要在類外單獨分配空間
- 靜態成員變數在程式內部位於全域性資料區
- 在定義時直接通過
-
語法規則
Type ClassName:VarName = value;
-
示例:靜態成員變數的使用
-
Demo
#include <stdio.h> class Test { private: static int cCount; public: Test() { cCount++; } ~Test() { --cCount; } int getCount() { return cCount; } }; int Test::cCount = 0; Test gTest; int main() { Test t1; Test t2; printf("count = %d\n", gTest.getCount()); printf("count = %d\n", t1.getCount()); printf("count = %d\n", t2.getCount()); Test* pt = new Test(); printf("count = %d\n", pt->getCount()); delete pt; printf("count = %d\n", gTest.getCount()); return 0; }
-
編譯執行
count = 3 count = 3 count = 3 count = 4 count = 3
-