0. 成員變量的回顧
- 通過對(duì)象名能夠訪問
public成員變量 - 每個(gè)對(duì)象的成員變量都是專屬的
- 成員變量不能在對(duì)象之間共享
1. 新的需求
- 統(tǒng)計(jì)在程序運(yùn)行期間某個(gè)類的對(duì)象數(shù)目
- 保證程序的安全性(不能使用全局變量)
- 隨時(shí)可以獲取當(dāng)前對(duì)象的數(shù)目
編程說明:解決方案
#include <stdio.h>
class Test
{
private:
static int cCount; // 定義靜態(tài)成員變量
public:
Test()
{
cCount++;
}
~Test()
{
--cCount;
}
int getCount()
{
return cCount;
}
};
int Test::cCount = 0; // 使用靜態(tài)成員變量
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é)果:
count = 3
count = 3
count = 3
count = 4
count = 3
2. 靜態(tài)成員變量
- 靜態(tài)成員變量屬于整個(gè)類所有
- 靜態(tài)成員變量的生命期不依賴與任何對(duì)象,其生命周期如全局變量,為整個(gè)程序的運(yùn)行周期
- 可以通過類名直接訪問公有靜態(tài)成員變量
- 所有對(duì)象共享類的靜態(tài)成員變量
- 可以通過對(duì)象名訪問公有靜態(tài)成員變量
3. 靜態(tài)成員變量的特性及語法規(guī)則
-
特性
- 在定義時(shí)直接通過
static關(guān)鍵字修飾 - 靜態(tài)成員變量需要在類外單獨(dú)分配空間
- 靜態(tài)成員變量在程序內(nèi)部位于全局?jǐn)?shù)據(jù)區(qū)
- 在定義時(shí)直接通過
語法規(guī)則:
Type ClassName::VarName = value;
4. 小結(jié)
- 類中可以通過
static關(guān)鍵字定義靜態(tài)成員變量 - 靜態(tài)成員變量隸屬于類所有
- 每一個(gè)對(duì)象都可以訪問靜態(tài)成員變量
- 靜態(tài)成員變量在全局?jǐn)?shù)據(jù)區(qū)分配空間
- 靜態(tài)成員變量的生命期為程序運(yùn)行期