程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> C++ >> C++入門知識 >> c++ static 類成員

c++ static 類成員

編輯:C++入門知識

c++ static 類成員


一.什麼是static類成員

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

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

 

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

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

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

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

 

三.定義static成員

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

 

class A
{
   public:
     static int Getval() { return value;}
     static void Setval( int );
  private:
    static int value;
}
 int A::value=0; //初始化


 

四.使用類的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 數據成員就可以在類的定義體中進行初始化:

 

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; //初始化
 const int A:: num;

 

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成員函數中修改.

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved