c++ static 類成員

來源:互聯網
上載者:User

標籤:

一.什麼是static類成員

    對於特定類類型的全體對象而言, 訪問一個全域對象有時是必要的. 然後,全域對象會破壞封裝: 對象需要支援特定類抽象的實現. 如果對象是全域的, 一般的使用者代碼就可以修改這個值. 類可以定義類靜態成員,而不是定義一個可普遍訪問的全域對象. 通常, 非static資料成員存在於類類型的每個對象中. 不像普通的資料成員, static資料成員獨立於該類的任意對象而存在, 每個static資料成員是與類關聯的對象, 並不與該類的對象相關聯.

    類也可以定義static成員函數. static成員函數沒有this形參 (static成員是類的組成部分但不是任何對象的組成部分)  , 它可以直接存取所屬類的static成員, 但不能直接使用非static成員.


二.使用類的static成員的優點

1)static成員的名字是在類的範圍中, 因此可以避免與其他類的成員或全域對象名字衝突.

2)可以實施封裝.static成員可以是私人成員,而全域對象不可以.

3)通過閱讀程式容易看出static成員是與特定類關聯的.這種可見度可清晰地顯示程式員的意圖.


三.定義static成員

   在成員聲明前加上關鍵字static將成員設為static. static成員遵循正常的公有/私人訪問規則.

<span style="font-size:14px;">class A{   public:     static int Getval() { return value;}     static void Setval( int );  private:    static int value;} int A::value=0; //初始化</span>


四.使用類的static成員 

    可以通過範圍操作符從類直接調用static成員, 或者通過對象,引用,或指向該類類型的對象的指標間接調用.

A pg;

A *pg1=&pg;

int B;

B=pg.Getval();

B=pg1->Getval();

B=A::Getval();


五.類的成員函數

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

void A:: Setval( int newVal)

{

   value=newVal;

}

  static成員不是任何對象的組成部分, 所以static成員函數不能聲明為const, 畢竟, 將成員函式宣告為const就是承諾不會修改該函數所屬的對象. static成員函數也不能聲明為虛函數.


六.static資料成員

   static資料成員可以聲明為任意類型: 常量, 引用, 數組, 類類型, 等等.

   static資料成員必須在類定義的外部定義(正好一次), 不像普通資料成員, static成員不是通過類建構函式進行初始化, 而是應該在定義時進行初始化.

   定義方式如下:

   先指定類型名, 接著是成員的完全限定名

int A::value=0; //初始化


1)特殊的整型const static 成員

    一般而言static成員像普通資料成員一樣不能在類的定義體中初始化. 但有一個例外, 那就是只要初始化是一個常量運算式, 整型const static 資料成員就可以在類的定義體中進行初始化:

   

<span style="font-size:14px;">class A{   public:     static int Getval() { return value;}     static void Setval( int );  private:    static const int num = 10;     int Sz[num];    static int value;} int A::value=0; //初始化</span>
<span style="font-size:14px;"> const int A:: num;</span>

const static 資料成員在類的定義體中初始化時,  該資料成員仍必須在類的定義體之外進行定義.


2) static 成員不是類對象的組成部分

   static 成員獨立於任何對象而存在, 不是類類型對象的組成部分.  它們的使用方式對於非static資料成員而言是不合法的.

例如static 資料成員的類型可以是該成員所屬的類類型.  而非static成員被限定聲明為其自身類對象的指標或引用.

class C

{

  private:

    static C tmp;   //ok

   C tmp; //wrong

};


除了static資料成員還有一個比較特殊的是mutable成員, mutable成員的用法也是在類型名前面加上mutable, mutable成員永遠不能為const, 它的值可以在const成員函數中修改.

c++ static 類成員

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.