C++分析講解類的靜態(tài)成員變量是什么
一、成員變量的回顧
- 通過(guò)對(duì)象名能夠訪問(wèn) public 成員變量
- 每個(gè)對(duì)象的成員變量都是專屬的
- 成員變量不能在對(duì)象之間共享
二、新的需求
- 統(tǒng)計(jì)在程序運(yùn)行期間某個(gè)類的對(duì)象數(shù)目
- 保證程序的安全性(不能使用全局變量)
- 隨時(shí)可以獲取當(dāng)前對(duì)象的數(shù)目
下面來(lái)看示例:
#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é)果如下:

雖然這段代碼可以獲得當(dāng)前定義對(duì)象的數(shù)量,但是使用了全局變量,不能保證程序的安全性,那么有什么好的辦法呢?且看下面。
三、靜態(tài)成員變量
在 C++ 中可以定義靜態(tài)成員變量
- 靜態(tài)成員變量屬于整個(gè)類所有
- 靜態(tài)成員變量的生命期不依賴于任何對(duì)象
- 可以通過(guò)類名直接訪問(wèn)公有靜態(tài)成員變量
- 所有對(duì)象共享類的靜態(tài)成員變量
- 可以通過(guò)對(duì)象名訪問(wèn)公有靜態(tài)成員變量
靜態(tài)成員變量的特性
- 在定義時(shí)直接通過(guò) static 關(guān)鍵字修飾
- 靜態(tài)成員變量需要在類外單獨(dú)分配空間
- 靜態(tài)成員變量在程序內(nèi)部位于全局?jǐn)?shù)據(jù)區(qū)
語(yǔ)法規(guī)則:
Type ClassName:VarName = value;
下面來(lái)看一下靜態(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(); 動(dòng)態(tài)在堆空間生成了一個(gè) test 對(duì)象,所以會(huì)觸發(fā)構(gòu)造函數(shù)的調(diào)用,所以 count 變成了 4,delete pt; 后 count 就變成 3 了。
四、小結(jié)
- 類中可以通過(guò) static 關(guān)鍵定義靜態(tài)成員變量
- 靜態(tài)成員變量隸屬于類所有
- 每一個(gè)對(duì)象都可以訪問(wèn)靜態(tài)成員變量
- 靜態(tài)成員變量在全局?jǐn)?shù)據(jù)區(qū)分配空間
- 靜態(tài)成員變量的生命期為程序運(yùn)行期
到此這篇關(guān)于C++分析講解類的靜態(tài)成員變量是什么的文章就介紹到這了,更多相關(guān)C++靜態(tài)成員變量?jī)?nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
C++實(shí)現(xiàn)LeetCode(140.拆分詞句之二)
這篇文章主要介紹了C++實(shí)現(xiàn)LeetCode(140.拆分詞句之二),本篇文章通過(guò)簡(jiǎn)要的案例,講解了該項(xiàng)技術(shù)的了解與使用,以下就是詳細(xì)內(nèi)容,需要的朋友可以參考下2021-07-07
利用Matlab編寫(xiě)簡(jiǎn)易版連連看小游戲
連連看作為經(jīng)典的小游戲,一定是很多人的回憶吧。本文將用Matlab實(shí)現(xiàn)這一經(jīng)典的游戲,文中示例代碼具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2022-03-03
OpenCV 圖像拼接和圖像融合的實(shí)現(xiàn)
本文主要介紹了OpenCV 圖像拼接和圖像融合,文中通過(guò)示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2021-08-08
使用代碼驗(yàn)證linux子進(jìn)程與父進(jìn)程的關(guān)系
Linux下父進(jìn)程可以使用fork 函數(shù)創(chuàng)建子進(jìn)程,但是當(dāng)父進(jìn)程先退出后,子進(jìn)程會(huì)不會(huì)也退出呢?通過(guò)下面這個(gè)小實(shí)驗(yàn),我們能夠很好的看出來(lái)2014-02-02

