まず、staticクラスの定義方法ですが、クラス宣言の前にstaticキーワードを付けることで、そのクラスを静的にすることができます。静的クラスは、インスタンス化することなく、そのクラスのメンバや関数にアクセスすることができます。
静的クラスの主な特徴は以下の通りです:
-
インスタンス化不要: 静的クラスはオブジェクト指向の特性の一部でありながら、インスタンス化する必要がありません。そのため、オブジェクトの生成や削除に関わるオーバーヘッドを避けることができます。
-
グローバルなアクセス: 静的クラスのメンバや関数は、クラス名を指定するだけでアクセスすることができます。インスタンスを生成する必要がないため、どの部分からでも簡単にアクセスできます。
-
名前空間: 静的クラスは名前空間を提供します。異なるクラスや関数内で同じ名前の静的クラスを定義することができ、名前の衝突を回避することができます。
-
ライフタイム: 静的クラスのメンバ変数はプログラムの実行中ずっと存在し続けます。また、静的クラスのコンストラクタやデストラクタは呼び出されないため、メンバ変数の初期化や解放には注意が必要です。
以下に、staticクラスの使用例をいくつか示します。
#include <iostream>
class MyStaticClass {
public:
static int count; // 静的メンバ変数の定義
static void printCount() { // 静的メンバ関数の定義
std::cout << "Count: " << count << std::endl;
}
};
int MyStaticClass::count = 0; // 静的メンバ変数の初期化
int main() {
MyStaticClass::printCount(); // 静的メンバ関数の呼び出し
MyStaticClass::count = 5; // 静的メンバ変数へのアクセス
MyStaticClass::printCount(); // 静的メンバ関数の呼び出し
return 0;
}
この例では、MyStaticClassという静的クラスを定義し、静的メンバ変数countと静的メンバ関数printCountを使用しています。メイン関数内で静的メンバ関数を呼び出し、静的メンバ変数へのアクセスも行っています。