C++類:static類成員

一,static類成員的優點(區別於全局對象)

①static在類的作用域中,可避免同名全局對象衝突.

②可實施封裝,不容易被外部簡單更改其值.

③通過引用方式(區域符::)可清晰表明是與特定類關聯的.

 

二,定義static成員

①每個類對象都沒有與static數據成員相對應,這個static成員是由整個類類型的全體對象共享,

   同一個類的所有對象共用同一個static成員. 

②遵循正常的公有/私有訪問規則.

static 類型 name;

static 類型 name();

 

三,使用類的static成員

①通過 Classobj.member 使用(類對象.成員)

②通過 Classp->menber 使用(類指針->成員)

③通過 Class::member 使用(類::成員)

 

四,static成員函數

外部定義static成員函數時,無須重複指定static保留字,保留字只出現在類定義體內聲明處:

  class A{  

  public:

   //public members

  private:

    static int fun();

    //else private members

  };

int A::fun()   { .....; }

(因爲 statci 成員是類的組成部分而不是任何對象的組成部分, 所以 static 函數木有 this 指針)

 

五,static數據成員

※在類的定義體外部進行定義.static數據成員不能通過構造函數進行初始化,應在定義變量時進行初始化.

   先指定類型,後接成員的完全限定名.(隨後可沒有限定地直接使用類的數據成員或成員函數)

   類型 類::static_mem = value;(value 可以爲類的數據成員或成員函數)

 

六,特殊的整型 const static 成員

 在類的定義體中進行初始化,在類的定義體外進行定義

(ps:類定義時內存並沒有分配空間給static成員,需對static成員進行定義才能使用static成員)

 類定義體中:

  static const int p = 30;

 類定義體外:

  const int Class::p    ;   //不必再製定其初始值

 

七,static成員不是類對象的組成部分

①static數據成員可以是該成員所屬的類類型.非static成員被限定爲自身類型的指針或引用

②static數據成員可用作默認實參(static成員的值可獨立於類對象使用):

  class Bar{

   public:

     Bar& clear(char = bkground);//默認clear()函數的實參爲char類型的bkground

   private:

    static const char bkground = '#';

    static Bar mem1;        //ok.

    Bar *mem2;              //ok

    Bar   mem3;              //error,不能定義自身類型對象作爲數據成員

};

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章