C++分析講解類的靜態(tài)成員變量是什么
一、成員變量的回顧
- 通過對象名能夠訪問 public 成員變量
- 每個對象的成員變量都是專屬的
- 成員變量不能在對象之間共享
二、新的需求
- 統(tǒng)計在程序運行期間某個類的對象數(shù)目
- 保證程序的安全性(不能使用全局變量)
- 隨時可以獲取當前對象的數(shù)目
下面來看示例:
#include <stdio.h> int gCount = 0; class Test { private: int mCount; public: Test() : mCount(0) { gCount++; } ~Test() { --gCount; } int getCount() { return gCount; } }; 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; }
輸出結(jié)果如下:
雖然這段代碼可以獲得當前定義對象的數(shù)量,但是使用了全局變量,不能保證程序的安全性,那么有什么好的辦法呢?且看下面。
三、靜態(tài)成員變量
在 C++ 中可以定義靜態(tài)成員變量
- 靜態(tài)成員變量屬于整個類所有
- 靜態(tài)成員變量的生命期不依賴于任何對象
- 可以通過類名直接訪問公有靜態(tài)成員變量
- 所有對象共享類的靜態(tài)成員變量
- 可以通過對象名訪問公有靜態(tài)成員變量
靜態(tài)成員變量的特性
- 在定義時直接通過 static 關(guān)鍵字修飾
- 靜態(tài)成員變量需要在類外單獨分配空間
- 靜態(tài)成員變量在程序內(nèi)部位于全局數(shù)據(jù)區(qū)
語法規(guī)則:
Type ClassName:VarName = value;
下面來看一下靜態(tài)成員變量的使用:
#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; }
輸出結(jié)果如下:
Test* pt = new Test();
動態(tài)在堆空間生成了一個 test 對象,所以會觸發(fā)構(gòu)造函數(shù)的調(diào)用,所以 count 變成了 4,delete pt; 后 count 就變成 3 了。
四、小結(jié)
- 類中可以通過 static 關(guān)鍵定義靜態(tài)成員變量
- 靜態(tài)成員變量隸屬于類所有
- 每一個對象都可以訪問靜態(tài)成員變量
- 靜態(tài)成員變量在全局數(shù)據(jù)區(qū)分配空間
- 靜態(tài)成員變量的生命期為程序運行期
到此這篇關(guān)于C++分析講解類的靜態(tài)成員變量是什么的文章就介紹到這了,更多相關(guān)C++靜態(tài)成員變量內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
C++ Boost Fusion創(chuàng)建異構(gòu)容器詳解
Boost.Fusion 使創(chuàng)建異構(gòu)容器成為可能。例如,您可以創(chuàng)建一個向量,其第一個元素是 int,第二個元素是字符串。此外,Boost.Fusion 提供了處理異構(gòu)容器的算法。您可以將 Boost.Fusion 視為異構(gòu)容器的標準庫2022-11-11Qt實現(xiàn)導(dǎo)出QTableWidget/QTableView數(shù)據(jù)
這篇文章主要介紹了在Qt中實現(xiàn)將QTableWidget或者QTableView中的數(shù)據(jù)直接導(dǎo)出的示例代碼,文中的示例代碼講解詳細,感興趣的可以了解一下2022-01-01C語言的abs()函數(shù)和div()函數(shù)你了解嗎
這篇文章主要為大家詳細介紹了C語言的abs()函數(shù)和div()函數(shù),文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下,希望能夠給你帶來幫助2022-02-02