天天看點

C++深度解析 類的靜态成員變量 --- static(24)成員變量的回顧靜态成員變量小結

C++深度解析 類的靜态成員變量 --- static(24)

成員變量的回顧

通過對象名能夠通路public成員變量。

每個對象的成員變量都是專屬的。

成員變量不能在對象之間共享。

PS:成員變量是對象自己的,是以成員變量一般都設定為私有的。

新的需求:

  • 統計在程式運作期間某個類的對象數目。
  • 保證程式的安全性(不能使用全局變量)。
  • 随時可以擷取目前對象的數目。

示例程式:

#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;
}
           

結果如下:

C++深度解析 類的靜态成員變量 --- static(24)成員變量的回顧靜态成員變量小結

分析:我們期望的是列印3,但是結果為1。因為mCount是成員變量,成員變量是每個對象都有一套的,三個對象gTest,t1,t2都有一個mcount,并且在構造函數裡mcount初始化為0。

靜态成員變量

在C++中可以定義靜态成員變量

  • 靜态成員變量屬于整個類所有
  • 靜态成員變量的生命期不依賴于任何對象
  • 可以通過類名直接通路公有靜态成員變量
  • 所有對象共享類的靜态成員變量
  • 可以通過對象名通路公有靜态成員變量

靜态成員變量的特性

  • 在定義時直接通過static關鍵字修飾
  • 靜态成員變量需要在類外單獨配置設定空間
  • 靜态成員變量在程式内部位于全局資料區

文法規則:(在類的外部,單獨定義,以便為它配置設定空間)

Type ClassName::VarName = value;
           

示例程式: 

#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()); //3
    printf("count = %d\n", t1.getCount());    //3
    printf("count = %d\n", t2.getCount());    //3
    
    //指針pt指向堆空間的一個對象
    Test* pt = new Test();
    printf("count = %d\n", pt->getCount());   //4
    
    delete pt;
    
    printf("count = %d\n", gTest.getCount()); //3
    
    return 0;
}
           

結果如下:

C++深度解析 類的靜态成員變量 --- static(24)成員變量的回顧靜态成員變量小結

小結

類中可以通過static關鍵字定義靜态成員變量

靜态成員變量隸屬于類所有

每一個對象都可以通路靜态成員變量

靜态成員變量在全局資料區配置設定空間

靜态成員變量的生命期為程式運作期

繼續閱讀