• <td id="46i6g"><rt id="46i6g"></rt></td>
    <td id="46i6g"><kbd id="46i6g"></kbd></td>
  • <xmp id="46i6g"><option id="46i6g"></option><option id="46i6g"><option id="46i6g"></option></option>
  • <td id="46i6g"></td>
    發布時間:2020-09-29 09:38 原文鏈接: C++之靜態成員變量和靜態成員函數學習總結(一)

    上圖的板子有最近買的,也有以前買的(stm32、esp8266、51、eps32、小熊派、合宙的cat1、樹莓派3b+);說實話,這些板子買來,一直放在那里吃灰,后期自己的方向也不玩硬件開發板啥的;所以上面的板子都送給了公眾號讀者在校生,讓這些板子發揮它們最大的價值,板子也會在最近慢慢一一送出去;贈人與玫瑰,手有余香!

    好了回歸主題,今天繼續分享c++的文章,學習還是不能落下,flag未完成,任務艱巨,好好學習。

    一、靜態成員變量:

    平時我們在寫類的時候,類中的成員變量,我們一般是通過對象名來訪問public成員變量的,一般private(私有)的成員變量,對象是不能直接訪問的;同時我們要明白每個對象的成員變量都是專屬的,而且成員變量是不能在對象之間共享的,這就是專屬性。下面我們來做一個小的程序需求來慢慢引出靜態成員變量:

    統計在程序運行期間某個類的對象數目

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

    隨時可以獲取當前對象的數目

    代碼版本一:

    #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("mCount = %dn",gTest.getCount());    printf("mCount = %dn",t1.getCount());    printf("mCount = %dn",t2.getCount());    return 0;}

    運行結果:

    root@txp-virtual-machine:/home/txp# ./a.outmCount = 1mCount = 1mCount = 1

    從運行結果來我們可以看出來,對象獨立性(專屬性);而且結果沒有達到我們的預期要求,于是乎,為了解決這個問題,我們就要排靜態成員變量出場了。

    1、c++中可以定義靜態成員變量:

    靜態成員變量屬于整個類所有

    靜態成員變量的生命期不依賴于任何對象(上面的程序,每個對象的成員變量是獨立的,所以打印出的mCount的值分別為1)

    可以通過類名直接訪問公有靜態成員變量

    所有對象共享類的靜態成員變量

    可以通過對象名 訪問公有靜態成員變量

    2、靜態成員變量的特性:

    在定義時直接通過static關鍵字修飾

    靜態成員變量需要在類外單獨分配空間

    靜態成員變量在程序內部位于全局數據區

    3、語法規則:

    Type ClassName::VarName = value;注意在類的外部進行初始化

    代碼版本二:

    #include <stdio.h>class Test{private:  static int mCount;public:  Test()//不要使用初始化列表進行初始化  {    mCount++;  }  ~Test()  {     --mCount;  }  int getCount()  {      return mCount;  }};int Test::mCount = 0;Test gTest;int main(){   Test t1;   Test t2;   printf("mCount=%dn",gTest.getCount());   printf("mCount=%dn",t1.getCount());   printf("mCount=%dn",t2.getCount());   return 0;}

    運行結果:

    root@txp-virtual-machine:/home/txp# ./a.outmCount=3mCount=3mCount=3


  • <td id="46i6g"><rt id="46i6g"></rt></td>
    <td id="46i6g"><kbd id="46i6g"></kbd></td>
  • <xmp id="46i6g"><option id="46i6g"></option><option id="46i6g"><option id="46i6g"></option></option>
  • <td id="46i6g"></td>
    亚洲日本va中文字幕久久道具