真实的国产乱ⅩXXX66竹夫人,五月香六月婷婷激情综合,亚洲日本VA一区二区三区,亚洲精品一区二区三区麻豆

成都創(chuàng)新互聯(lián)網(wǎng)站制作重慶分公司

類的靜態(tài)成員變量及函數(shù)(二十)-創(chuàng)新互聯(lián)

    我們正常情況下能通過(guò)對(duì)象名來(lái)訪問(wèn) public 成員變量,每個(gè)對(duì)象的成員變量都是專屬的,成員變量不能在對(duì)象之間共享的。我們現(xiàn)在學(xué)了這么長(zhǎng)時(shí)間的 C++,現(xiàn)在又有了一個(gè)新的需求:a> 同級(jí)在程序運(yùn)行期間某個(gè)類的對(duì)象數(shù)目;b> 保證程序的安全性(不能使用全局變量);c> 隨時(shí)可以獲取當(dāng)前對(duì)象的數(shù)目。

讓客戶滿意是我們工作的目標(biāo),不斷超越客戶的期望值來(lái)自于我們對(duì)這個(gè)行業(yè)的熱愛(ài)。我們立志把好的技術(shù)通過(guò)有效、簡(jiǎn)單的方式提供給客戶,將通過(guò)不懈努力成為客戶在信息化領(lǐng)域值得信任、有價(jià)值的長(zhǎng)期合作伙伴,公司提供的服務(wù)項(xiàng)目有:域名注冊(cè)、網(wǎng)站空間、營(yíng)銷軟件、網(wǎng)站建設(shè)、木壘哈薩克網(wǎng)站維護(hù)、網(wǎng)站推廣。

        我們首先想到的是定義一個(gè)私有成員變量,然后在構(gòu)造函數(shù)中進(jìn)行 ++ 操作,在析構(gòu)函數(shù)中進(jìn)行 -- 操作。我們?cè)囍鴮懴鲁绦?/p>

#include 

class Test
{
private:
    int mCount;
public:
    Test()
    {
        mCount++;
    }
    ~Test()
    {
        --mCount;
    }
    int getCount()
    {
        return mCount;
    }
};

Test gTest;

int main()
{
    Test t1;
    Test t2;
    
    printf("gTest.getCount() = %d\n", gTest.getCount());
    printf("t1.getCount() = %d\n", t1.getCount());
    printf("t2.getCount() = %d\n", t2.getCount());
    
    return 0;
}

        我們先來(lái)試著編譯下

類的靜態(tài)成員變量及函數(shù)(二十)

        那么它打印出來(lái)的是都是隨機(jī)值,我們?cè)跇?gòu)造函數(shù)中的初始化列表中進(jìn)行初始化為0

類的靜態(tài)成員變量及函數(shù)(二十)

        我們看到打印出三個(gè) 1,并不是我們所期望的三個(gè) 3。這是因?yàn)樵诿看涡律蓪?duì)象調(diào)用構(gòu)造函數(shù)時(shí),它都會(huì)初始化。那么我們?cè)囍x一個(gè)全局變量來(lái)試試呢,int gMount = 0


類的靜態(tài)成員變量及函數(shù)(二十)

        顯然它是可以滿足的,但是我們的客戶需求里有一條便是不準(zhǔn)使用全局變量。所以這個(gè)只得放棄。這時(shí)我們便想到了靜態(tài)成員變量,下來(lái)我們來(lái)講講靜態(tài)成員變量。在 C++ 中可以定義靜態(tài)成員變量:a> 靜態(tài)成員變量屬于整個(gè)類所有;b> 靜態(tài)成員變量的聲明周期不依賴于任何對(duì)象;c> 可以通過(guò)類名直接訪問(wèn)共有靜態(tài)成員變量;d> 所有對(duì)象共享類的靜態(tài)成員變量;e> 可以通過(guò)對(duì)象名訪問(wèn)公有靜態(tài)成員變量。靜態(tài)成員變量的特性:1、在定義時(shí)直接通過(guò) static 關(guān)鍵字修飾;2、靜態(tài)成員變量需要在類外單獨(dú)分配空間;3、靜態(tài)成員變量在程序內(nèi)部位于全局?jǐn)?shù)據(jù)區(qū)。它的語(yǔ)法規(guī)則是:Type ClassName::VarName = value;

        下來(lái)我們使用靜態(tài)成員變量來(lái)看看是否會(huì)滿足要求,程序如下

#include 

class Test
{
private:
    static int mCount;
public:
    Test() : mCount(0)
    {
        mCount++;
    }
    ~Test()
    {
        --mCount;
    }
    int getCount()
    {
        return mCount;
    }
};

Test gTest;

int main()
{
    Test t1;
    Test t2;
    
    printf("gTest.getCount() = %d\n", gTest.getCount());
    printf("t1.getCount() = %d\n", t1.getCount());
    printf("t2.getCount() = %d\n", t2.getCount());
    
    return 0;
}

        我們編譯下看看

類的靜態(tài)成員變量及函數(shù)(二十)

        我們看到報(bào)錯(cuò)了,要在全局?jǐn)?shù)據(jù)區(qū)進(jìn)行初始化,我們加上 int Test::mCount = 0;并且去掉構(gòu)造函數(shù)中初始化列表的初始化,再次編譯

類的靜態(tài)成員變量及函數(shù)(二十)

        我們看到已經(jīng)實(shí)現(xiàn)了哈,那么我們是否可以放心的交給用戶了哈。仔細(xì)看下,我們的程序沒(méi)完成第三條需求,隨時(shí)可以獲取當(dāng)前對(duì)象的數(shù)目。如果我們沒(méi)有定義對(duì)象的話,那么我們這個(gè)程序是否還可以完成功能呢?肯定不行了。

        那么我們嘗試將 mCount 屬性改為 public 呢,看看是否可以滿足,程序如下

#include 

class Test
{
public:
    static int mCount;
public:
    Test()
    {
        mCount++;
    }
    ~Test()
    {
        --mCount;
    }
    int getCount()
    {
        return mCount;
    }
};

int Test::mCount = 0;

int main()
{
    printf("mCount = %d\n", Test::mCount);
    
    return 0;
}

        結(jié)果如下

類的靜態(tài)成員變量及函數(shù)(二十)

        我們看到當(dāng)沒(méi)有定義對(duì)象的時(shí)候,它的數(shù)目是 0。但是這樣做是不安全的,我們?cè)?main 函數(shù)中將 mCount 手動(dòng)改為 100,看看結(jié)果還是 0 嗎?

類的靜態(tài)成員變量及函數(shù)(二十)

        我們看到它變成 100 了。也就是說(shuō),這是不安全的。所以這個(gè)方法不可取。那么我們這時(shí)就需要分析問(wèn)題了,我們需要什么呢?不依賴對(duì)象就可以訪問(wèn)靜態(tài)成員變量,必須保證靜態(tài)成員變量的安全性,方便快捷的獲取靜態(tài)成員變量的值。在 C++ 中可以定義靜態(tài)成員函數(shù):a> 靜態(tài)成員函數(shù)是類中特殊的成員函數(shù);b> 靜態(tài)成員函數(shù)屬于整個(gè)類所有;c> 可以通過(guò)類名直接訪問(wèn)公有靜態(tài)成員函數(shù);d> 可以通過(guò)對(duì)象名訪問(wèn)公有靜態(tài)成員函數(shù)。它的定義便是直接通過(guò) static 關(guān)鍵字修飾成員函數(shù)。

        下來(lái)我們?cè)囋囲o態(tài)成員函數(shù),程序如下

#include 

class Demo
{
private:
    int i;
public:
    int getI();
    static void staticFunc(const char* s);
    static void staticSetI(Demo& d, int v);
};

int Demo::getI()
{
    return i;
}

void Demo::staticFunc(const char* s)
{
    printf("staticFunc: %s\n", s);
}

void Demo::staticSetI(Demo& d, int v)
{
    d.i = v;
}

int main()
{
    Demo::staticFunc("mian begin...");
    
    Demo d;
    
    Demo::staticSetI(d, 10);
    
    printf("d.i = %d\n", d.getI());
    
    Demo::staticFunc("mian end...");
    
    return 0;
}

        結(jié)果如下

類的靜態(tài)成員變量及函數(shù)(二十)

        那么我們?cè)囋嚹芊裰苯釉?staticSetI 函數(shù)中對(duì) i = v 呢?(去掉 Demo& d),我們?cè)囋?img src="/upload/otherpic39/222724.jpg" alt="類的靜態(tài)成員變量及函數(shù)(二十)">

        它報(bào)錯(cuò)了,因?yàn)殪o態(tài)成員函數(shù)不能直接訪問(wèn)普通成員變量。下面我們關(guān)于靜態(tài)成員函數(shù)和普通成員函數(shù)的區(qū)別做了一個(gè)對(duì)比,如下圖所示

類的靜態(tài)成員變量及函數(shù)(二十)

        那么關(guān)于我們之前提出的需求,我們可以利用靜態(tài)成員函數(shù)來(lái)滿足,程序如下

#include 

class Test
{
private:
    static int mCount;
public:
    Test()
    {
        mCount++;
    }
    ~Test()
    {
        --mCount;
    }
    static int getCount()
    {
        return mCount;
    }
};

int Test::mCount = 0;

int main()
{
    printf("mCount = %d\n", Test::getCount());
    
    Test t1;
    Test t2;
    
    printf("t1.getCount() = %d\n", t1.getCount());
    printf("t2.getCount() = %d\n", t2.getCount());
    
    Test* pt = new Test();
    
    printf("t2.getCount() = %d\n", pt->getCount());
    
    delete pt;
    
    printf("t2.getCount() = %d\n", pt->getCount());
    
    return 0;
}

        我們看看編譯結(jié)果

類的靜態(tài)成員變量及函數(shù)(二十)

        我們看到已經(jīng)滿足客戶的需求了。通過(guò)對(duì)靜態(tài)成員變量和函數(shù)的學(xué)習(xí),總結(jié)如下:1、類中可以通過(guò) static 關(guān)鍵字定義靜態(tài)成員變量;2、靜態(tài)成員變量隸屬于類所有,每一個(gè)對(duì)象都可以訪問(wèn)靜態(tài)成員變量;3、靜態(tài)成員變量在全局?jǐn)?shù)據(jù)區(qū)分配空間,它的生命周期為程序運(yùn)行期;4、靜態(tài)成員函數(shù)是類中特殊的成員函數(shù);5、靜態(tài)成員函數(shù)沒(méi)有隱藏的 this 指針,它可以通過(guò)類名直接訪問(wèn);6、靜態(tài)成員函數(shù)只能直接訪問(wèn)靜態(tài)成員變量(函數(shù))。

        歡迎大家一起來(lái)學(xué)習(xí) C++ 語(yǔ)言,可以加我QQ:243343083。

另外有需要云服務(wù)器可以了解下創(chuàng)新互聯(lián)scvps.cn,海內(nèi)外云服務(wù)器15元起步,三天無(wú)理由+7*72小時(shí)售后在線,公司持有idc許可證,提供“云服務(wù)器、裸金屬服務(wù)器、高防服務(wù)器、香港服務(wù)器、美國(guó)服務(wù)器、虛擬主機(jī)、免備案服務(wù)器”等云主機(jī)租用服務(wù)以及企業(yè)上云的綜合解決方案,具有“安全穩(wěn)定、簡(jiǎn)單易用、服務(wù)可用性高、性價(jià)比高”等特點(diǎn)與優(yōu)勢(shì),專為企業(yè)上云打造定制,能夠滿足用戶豐富、多元化的應(yīng)用場(chǎng)景需求。


網(wǎng)站名稱:類的靜態(tài)成員變量及函數(shù)(二十)-創(chuàng)新互聯(lián)
分享URL:http://weahome.cn/article/cssjes.html

其他資訊

在線咨詢

微信咨詢

電話咨詢

028-86922220(工作日)

18980820575(7×24)

提交需求

返回頂部