静的メンバー (C++)
クラスには、静的なメンバー データとメンバー関数を含めることができます。 データ メンバーが static
として宣言されている場合は、クラスのすべてのオブジェクトに対してデータのコピーが 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
の値です。
静的データ メンバーはクラス メンバーのアクセス規則に従うため、静的データ メンバーへのプライベート アクセスはクラス メンバー関数およびフレンドだけに許可されます。 これらの規則については、「メンバー アクセス コントロール」で説明します。 例外は、静的データ メンバーが、そのアクセス制限にかかわらず、ファイルのスコープ内で定義されなければならないということです。 データ メンバーを明示的に初期化する場合は、初期化子を定義で指定する必要があります。
静的メンバーの型は、クラス名で修飾されていません。 そのため、BufferedOutput::bytecount
の型は long
です。
関連項目
フィードバック
https://aka.ms/ContentUserFeedback」を参照してください。
以下は間もなく提供いたします。2024 年を通じて、コンテンツのフィードバック メカニズムとして GitHub の issue を段階的に廃止し、新しいフィードバック システムに置き換えます。 詳細については、「フィードバックの送信と表示