静的データ メンバー (C++)
クラスには静的データ メンバーおよびメンバー関数を含めることができます。データ メンバーが 静的 として宣言するとデータの 1 種類のコピーはクラスのすべてのオブジェクトで保持されます。(詳細については静的メンバー関数 を参照してください)。
静的データ メンバーは特定のクラス型のオブジェクトの一部ではありません ; また個々のオブジェクトです。したがって静的データ メンバーの宣言は定義とは見なされません。データ メンバーはクラス スコープで宣言されていますが定義はファイル スコープで実行されます。これらの静的メンバーは外部リンケージがあります。次に例を示します。
// 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 の場合です。
静的データ メンバーはクラス メンバーのアクセス規則が適用されます。したがって静的データ メンバーへのアクセスはクラスのプライベート メンバー関数と Friends にのみ使用できます。これらの規則は アクセスコントロール に示します。例外は静的データ メンバーでアクセスの制限に関係なくファイルのスコープで定義する必要があります。データ メンバーを明示的に初期化する場合は初期化子を定義する必要があります。
静的メンバーの型はクラス名で修飾されていません。したがってBufferedOutput::bytecount の種類は long です。