共用方式為


靜態資料成員 (C++)

類別可以包含靜態成員的資料和成員函式。 當資料成員被宣告為 「 靜態,只有一份資料會保留類別的所有物件。 (如需詳細資訊,請參閱靜態成員函式。)

靜態資料成員並不屬於物件提供的類別型別 ; 它們是不同的物件。 如此一來,靜態資料成員的宣告,並不是一個定義。 資料成員宣告在類別範圍內,但它在檔案範圍執行定義。 這些靜態成員有外部連結。 下面這個範例可說明這點:

// static_data_members.cpp
class BufferedOutput
{
public:
   // Return number of bytes written by any object of this class.
   short BytesWritten()
   {
      return bytecount;
   }

   // Reset the counter.
   static void ResetCount()
   {
      bytecount = 0;
   }

   // Static member declaration.
   static long bytecount;
};

// Define bytecount in file scope.
long BufferedOutput::bytecount;

int main()
{
}

在上述程式碼中,成員bytecount宣告於類別內BufferedOutput,而必須定義在類別宣告之外。

靜態資料成員可以正確參考類別型別的物件參考。 使用寫入的位元組數目BufferedOutput可以取得物件,如下所示:

long nBytes = BufferedOutput::bytecount;

靜態的成員,才能存在,它並不需要任何類別型別的物件存在。 靜態成員亦可使用成員選取 (.->) 運算子。 例如:

BufferedOutput Console;

long nBytes = Console.bytecount;

在上述情況中,物件的參考 (Console) 不會評估。 傳回的值是靜態物件的bytecount。

靜態資料成員會隨著類別成員的存取規則,所以私用存取靜態資料成員只適用於類別成員函式和朋友。 這些規則所述成員存取控制。 例外狀況是靜態資料成員必須定義在檔案範圍,不論其存取限制。 如果要明確地初始化資料成員,就必須提供初始設定式與定義。

靜態成員的型別不是其類別名稱所限定的。 因此,型別中的BufferedOutput::bytecount是long。

請參閱

參考

類別、 結構和等位