靜態資料成員 (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。