1.2.10_C++ 類的靜態(tài)成員

C++ 類 & 對象

我們可以使用 static 關(guān)鍵字來把類成員定義為靜態(tài)的鳍征。

當(dāng)我們聲明類的成員為靜態(tài)時黍翎,這意味著無論創(chuàng)建多少個類的對象,靜態(tài)成員都只有一個副本艳丛。

靜態(tài)成員在類的所有對象中是共享的匣掸。如果不存在其他的初始化語句,在創(chuàng)建第一個對象時氮双,所有的靜態(tài)數(shù)據(jù)都會被初始化為零碰酝。

我們不能把靜態(tài)成員的初始化放置在類的定義中,但是可以在類的外部通過使用范圍解析運算符 :: 來重新聲明靜態(tài)變量從而對它進行初始化戴差,如下面的實例所示送爸。

下面的實例有助于更好地理解靜態(tài)數(shù)據(jù)成員的概念:

#include <iostream>
 
using namespace std;

class Box
{
   public:
      static int objectCount;
      // 構(gòu)造函數(shù)定義
      Box(double l=2.0, double b=2.0, double h=2.0)
      {
         cout <<"Constructor called." << endl;
         length = l;
         breadth = b;
         height = h;
         // 每次創(chuàng)建對象時增加 1
         objectCount++;
      }
      double Volume()
      {
         return length * breadth * height;
      }
   private:
      double length;     // 長度
      double breadth;    // 寬度
      double height;     // 高度
};

// 初始化類 Box 的靜態(tài)成員
int Box::objectCount = 0;

int main(void)
{
   Box Box1(3.3, 1.2, 1.5);    // 聲明 box1
   Box Box2(8.5, 6.0, 2.0);    // 聲明 box2

   // 輸出對象的總數(shù)
   cout << "Total objects: " << Box::objectCount << endl;

   return 0;
}

當(dāng)上面的代碼被編譯和執(zhí)行時,它會產(chǎn)生下列結(jié)果:

Constructor called.
Constructor called.
Total objects: 2

靜態(tài)函數(shù)成員

如果把函數(shù)成員聲明為靜態(tài)的造挽,就可以把函數(shù)與類的任何特定對象獨立開來碱璃。

靜態(tài)成員函數(shù)即使在類對象不存在的情況下也能被調(diào)用,靜態(tài)函數(shù)只要使用類名加范圍解析運算符 :: 就可以訪問饭入。

靜態(tài)成員函數(shù)只能訪問靜態(tài)數(shù)據(jù)成員嵌器,不能訪問其他靜態(tài)成員函數(shù)和類外部的其他函數(shù)。

靜態(tài)成員函數(shù)有一個類范圍谐丢,他們不能訪問類的 this 指針爽航。您可以使用靜態(tài)成員函數(shù)來判斷類的某些對象是否已被創(chuàng)建蚓让。

下面的實例有助于更好地理解靜態(tài)函數(shù)成員的概念:

#include <iostream>
 
using namespace std;

class Box
{
   public:
      static int objectCount;
      // 構(gòu)造函數(shù)定義
      Box(double l=2.0, double b=2.0, double h=2.0)
      {
         cout <<"Constructor called." << endl;
         length = l;
         breadth = b;
         height = h;
         // 每次創(chuàng)建對象時增加 1
         objectCount++;
      }

      double Volume()
      {
         return length * breadth * height;
      }

      static int getCount()
      {
         return objectCount;
      }

   private:
      double length;     // 長度
      double breadth;    // 寬度
      double height;     // 高度
};

// 初始化類 Box 的靜態(tài)成員
int Box::objectCount = 0;

int main(void)
{
  
   // 在創(chuàng)建對象之前輸出對象的總數(shù)
   cout << "Inital Stage Count: " << Box::getCount() << endl;

   Box Box1(3.3, 1.2, 1.5);    // 聲明 box1
   Box Box2(8.5, 6.0, 2.0);    // 聲明 box2

   // 在創(chuàng)建對象之后輸出對象的總數(shù)
   cout << "Final Stage Count: " << Box::getCount() << endl;

   return 0;
}

當(dāng)上面的代碼被編譯和執(zhí)行時,它會產(chǎn)生下列結(jié)果:

Inital Stage Count: 0
Constructor called.
Constructor called.
Final Stage Count: 2

代碼鏈接:https://github.com/karst87/cpp/tree/master/learning/com.runoob

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末讥珍,一起剝皮案震驚了整個濱河市历极,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌衷佃,老刑警劉巖趟卸,帶你破解...
    沈念sama閱讀 207,248評論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異氏义,居然都是意外死亡锄列,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,681評論 2 381
  • 文/潘曉璐 我一進店門惯悠,熙熙樓的掌柜王于貴愁眉苦臉地迎上來邻邮,“玉大人,你說我怎么就攤上這事克婶⊥惭希” “怎么了?”我有些...
    開封第一講書人閱讀 153,443評論 0 344
  • 文/不壞的土叔 我叫張陵情萤,是天一觀的道長鸭蛙。 經(jīng)常有香客問我,道長紫岩,這世上最難降的妖魔是什么规惰? 我笑而不...
    開封第一講書人閱讀 55,475評論 1 279
  • 正文 為了忘掉前任睬塌,我火速辦了婚禮泉蝌,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘揩晴。我一直安慰自己勋陪,他們只是感情好,可當(dāng)我...
    茶點故事閱讀 64,458評論 5 374
  • 文/花漫 我一把揭開白布硫兰。 她就那樣靜靜地躺著诅愚,像睡著了一般。 火紅的嫁衣襯著肌膚如雪劫映。 梳的紋絲不亂的頭發(fā)上违孝,一...
    開封第一講書人閱讀 49,185評論 1 284
  • 那天,我揣著相機與錄音泳赋,去河邊找鬼雌桑。 笑死,一個胖子當(dāng)著我的面吹牛祖今,可吹牛的內(nèi)容都是我干的校坑。 我是一名探鬼主播拣技,決...
    沈念sama閱讀 38,451評論 3 401
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼耍目!你這毒婦竟也來了膏斤?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 37,112評論 0 261
  • 序言:老撾萬榮一對情侶失蹤邪驮,失蹤者是張志新(化名)和其女友劉穎莫辨,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體毅访,經(jīng)...
    沈念sama閱讀 43,609評論 1 300
  • 正文 獨居荒郊野嶺守林人離奇死亡衔掸,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,083評論 2 325
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了俺抽。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片敞映。...
    茶點故事閱讀 38,163評論 1 334
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖磷斧,靈堂內(nèi)的尸體忽然破棺而出振愿,到底是詐尸還是另有隱情,我是刑警寧澤弛饭,帶...
    沈念sama閱讀 33,803評論 4 323
  • 正文 年R本政府宣布冕末,位于F島的核電站,受9級特大地震影響侣颂,放射性物質(zhì)發(fā)生泄漏档桃。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 39,357評論 3 307
  • 文/蒙蒙 一憔晒、第九天 我趴在偏房一處隱蔽的房頂上張望藻肄。 院中可真熱鬧,春花似錦拒担、人聲如沸嘹屯。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,357評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽州弟。三九已至,卻和暖如春低零,著一層夾襖步出監(jiān)牢的瞬間婆翔,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,590評論 1 261
  • 我被黑心中介騙來泰國打工掏婶, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留啃奴,地道東北人。 一個月前我還...
    沈念sama閱讀 45,636評論 2 355
  • 正文 我出身青樓气堕,卻偏偏與公主長得像纺腊,于是被迫代替她去往敵國和親畔咧。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 42,925評論 2 344

推薦閱讀更多精彩內(nèi)容