1

C++ で静的クラスを使用できるかどうか疑問に思っていました。つまり、C++ のようにクラスを static として宣言できstatic class fooますか? C++ で静的メンバー変数と静的メンバー関数を使用できることは知っていますが、静的クラスについてはわかりません。

編集:

クラスが静的であるとはどういう意味かを尋ねるつもりでした。

4

4 に答える 4

9

staticストレージ クラス指定子です。

  • 変数に適用され、オブジェクトの有効期間可視性を指定します。この場合、有効期間はプログラム全体の実行であり、可視性は特定の翻訳単位(通常は特定のソース ファイル) に制限されます。
  • 関数に適用すると、同様にオブジェクトの可視性を指定します。これは、オブジェクトが定義されている特定の翻訳単位に限定されます。
  • クラス メンバーの変数と関数に適用され、変数をオブジェクト自体ではなく、クラスのプロパティとして定義します。

それが半衒学的な定義です。問題は、「静的クラス」のアイデアに正確にどのセマンティクスを付けたいかということです。ネストされたクラスには、自動的に静的なプロパティがあります。これらはクラスのプロパティであり、個々のオブジェクトではありません。外側のスコープで宣言されたクラスの静的なようなプロパティが必要な場合 (つまり、異なる翻訳単位間で 1 つの定義規則と競合しない場合)、匿名の名前空間を使用できます。

于 2013-01-30T06:43:48.783 に答える
7

static キーワードは、それが参照するオブジェクトがプログラム全体を通して存在することを意味します。クラス定義は、オブジェクトを構築するための単なるアウトラインです。

それを念頭に置いて、名前空間を作成したり、インスタンスを 1 つだけ持つように設計されたクラスであるシングルトン オブジェクトを作成したりしたいと思うかもしれません。

于 2013-01-30T06:45:34.630 に答える
2

いいえ、しかし、静的メソッド (およびデータ) のみでクラスを作成する場合、基本的にほぼ同じことを達成できます。C++ には静的コンストラクターの概念がないことに注意してください。

于 2013-01-30T06:40:33.380 に答える
2

「静的クラス」で C# のものを参照している場合、C++ で同等のことは、単一のコンストラクターを作成してプライベートにし、非静的メンバーを作成しないようにすることです。

「静的クラス」でJavaのクラスを参照している場合、すべてのC++クラスは「静的」であるため、冗長になるため「静的」を追加できません。

于 2013-01-30T06:43:33.743 に答える