溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

C++類的靜態(tài)成員變量實(shí)例分析

發(fā)布時(shí)間:2022-04-24 10:39:38 來源:億速云 閱讀:169 作者:iii 欄目:開發(fā)技術(shù)

本文小編為大家詳細(xì)介紹“C++類的靜態(tài)成員變量實(shí)例分析”,內(nèi)容詳細(xì),步驟清晰,細(xì)節(jié)處理妥當(dāng),希望這篇“C++類的靜態(tài)成員變量實(shí)例分析”文章能幫助大家解決疑惑,下面跟著小編的思路慢慢深入,一起來學(xué)習(xí)新知識(shí)吧。

一、成員變量的回顧

  • 通過對(duì)象名能夠訪問 public 成員變量

  • 每個(gè)對(duì)象的成員變量都是專屬的

  • 成員變量不能在對(duì)象之間共享

二、新的需求

  • 統(tǒng)計(jì)在程序運(yùn)行期間某個(gè)類的對(duì)象數(shù)目

  • 保證程序的安全性(不能使用全局變量)

  • 隨時(shí)可以獲取當(dāng)前對(duì)象的數(shù)目

下面來看示例:

#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é)果如下:

C++類的靜態(tài)成員變量實(shí)例分析

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

三、靜態(tài)成員變量

在 C++ 中可以定義靜態(tài)成員變量

  • 靜態(tài)成員變量屬于整個(gè)類所有

  • 靜態(tài)成員變量的生命期不依賴于任何對(duì)象

  • 可以通過類名直接訪問公有靜態(tài)成員變量

  • 所有對(duì)象共享類的靜態(tài)成員變量

  • 可以通過對(duì)象名訪問公有靜態(tài)成員變量

靜態(tài)成員變量的特性

  • 在定義時(shí)直接通過 static 關(guān)鍵字修飾

  • 靜態(tài)成員變量需要在類外單獨(dú)分配空間

  • 靜態(tài)成員變量在程序內(nèi)部位于全局?jǐn)?shù)據(jù)區(qū)

語法規(guī)則:

Type ClassName:VarName = value;

下面來看一下靜態(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é)果如下:

C++類的靜態(tài)成員變量實(shí)例分析

Test* pt = new Test(); 動(dòng)態(tài)在堆空間生成了一個(gè) test 對(duì)象,所以會(huì)觸發(fā)構(gòu)造函數(shù)的調(diào)用,所以 count 變成了 4,delete pt; 后 count 就變成 3 了。

讀到這里,這篇“C++類的靜態(tài)成員變量實(shí)例分析”文章已經(jīng)介紹完畢,想要掌握這篇文章的知識(shí)點(diǎn)還需要大家自己動(dòng)手實(shí)踐使用過才能領(lǐng)會(huì),如果想了解更多相關(guān)內(nèi)容的文章,歡迎關(guān)注億速云行業(yè)資訊頻道。

向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

c++
AI