【C++】 25_類的靜態成員變量

成員變量的回顧

  • 經過對象名可以訪問 public 成員
  • 每一個對象的成員變量都是專屬的
  • 成員變量不能在對象之間共享

新的需求

  • 統計在程序運行期間某個類的對象數目
  • 保證程序的安全性(不能使用全局變量)
  • 隨時能夠獲取當前對象的數目

編程實驗: 解決方案的嘗試

#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;
}
輸出:
count = 1
count = 1
count = 1

分析:
每一個對象的都有本身獨立的成員變量,所以不具有全局統計的能力

靜態成員變量

  • 在 C++ 中能夠定義靜態成員變量編程

    • 靜態成員變量屬於整個類全部
    • 靜態成員變量的生命期不依賴於任何對象(與程序的運行期相同)
    • 能夠經過類名直接訪問公有靜態成員變量
    • 全部對象共享類的靜態成員變量
    • 能夠經過對象名訪問公有靜態成員變量

  • 靜態成員變量的特性安全

    • 在定義時接經過 static 關鍵字修飾
    • 靜態成員變量須要在類外單獨分配空間
    • 靜態成員變量在程序內部位於全局數據區
  • 語法規則:code

    • 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());
    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", pt->getCount());

    return 0;
}

小結

  • 類中能夠經過 static 關鍵字定義靜態成員變量
  • 靜態成員變量隸屬於類全部
  • 每個對象均可以訪問靜態成員變量
  • 靜態成員變量在全局數據區分配空間
  • 靜態成員變量的生命期爲程序運行期

以上內容參考狄泰軟件學院系列課程,請你們保護原創!對象

相關文章
相關標籤/搜索