日本免费高清视频-国产福利视频导航-黄色在线播放国产-天天操天天操天天操天天操|www.shdianci.com

學無先后,達者為師

網站首頁 編程語言 正文

C++分析講解類的靜態成員變量是什么_C 語言

作者:清風自在?流水潺潺 ? 更新時間: 2022-06-21 編程語言

一、成員變量的回顧

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

二、新的需求

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

下面來看示例:

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

輸出結果如下:

雖然這段代碼可以獲得當前定義對象的數量,但是使用了全局變量,不能保證程序的安全性,那么有什么好的辦法呢?且看下面。

三、靜態成員變量

在 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());
    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;
}

輸出結果如下:

Test* pt = new Test(); 動態在堆空間生成了一個 test 對象,所以會觸發構造函數的調用,所以 count 變成了 4,delete pt; 后 count 就變成 3 了。

四、小結

  • 類中可以通過 static 關鍵定義靜態成員變量
  • 靜態成員變量隸屬于類所有
  • 每一個對象都可以訪問靜態成員變量
  • 靜態成員變量在全局數據區分配空間
  • 靜態成員變量的生命期為程序運行期

原文鏈接:https://blog.csdn.net/weixin_43129713/article/details/124260197

欄目分類
最近更新