Tabsというクラスを持つ作業用コードベースがあります。このクラスのすべてのメソッドと変数は静的として定義されています。クラスの静的メンバーは、そのクラスのオブジェクトのすべてのインスタンスによって共有されることを理解します。このクラスは、あるタイプのデータをセットとして格納するために使用されます。多くの異なるファイルでは、クラスTabのオブジェクトをインスタンス化せずに、メンバー関数Tabs :: find()とTabs :: Insert()を使用します。私はこれがどのように機能し、どのようなプログラミング手法が呼び出されるのかを理解しようとしています。ありがとう。クラスのメンバーにアクセスします。このクラスのオブジェクトはインスタンス化されませんでした。すべてのメンバーは静的型です
答えて
static
データメンバーはmain
が入力される前に初期化されます。そのためアクセスするのがその理由です。ダイナミックまたは自動ではなく、スタティックメモリ内に存在します。
静的メンバーだけのクラスは、グローバル変数と関数を持つのと似ていますが、グループ化されています。これはプログラミング技術ではありません。単なるグローバルです。
//globals.h
class Globals
{
static int x;
public:
static int getX() {return x;}
};
//globals.cpp
#include "Globals.h"
int Globals::x = 1;
//main.cpp
#include "Globals.h"
//x is initialized before call to main
int main()
{
int x = Globals::getX();
}
私はこれを「時代遅れ」と呼んでいます。本質的にはclass
(または場合によってはstruct
)を使用して、namespace
をエミュレートしています。あなたはおそらくnamespace
が言語に追加された以前からコードを扱っている
namespace whatever {
int a, b, c;
double x, y, z;
}
:
class whatever {
static int a, b, c;
static double x, y, z;
};
int whatever::a, whatever::b, whatever::c;
double whatever::x, whatever::y, whatever::z;
はかなりのと同じです。それほど古くない場合は、著者があるかもしれません。あるいは、おそらくnamespace
(正しく)をサポートしていないコンパイラへの移植性を維持する意図がありました。
いずれにしても、修飾された名前を持つグローバル変数です。彼らがclass
/struct
の中にいるにもかかわらず、static
は静的な寿命を持っていることを意味しているので、構造体は名前にのみ影響し、初期化や破壊などは影響しません。
変数 'extern'を宣言する必要はありませんか? –
@LuchianGrigore:他のグローバルと同様に、externを一箇所も持たずに定義し、他のTUから使いたい場合は、それらを 'extern'宣言します(通常は宣言必要に応じてそれを含む)。 –
それは私が言ったことです。 –
- 1. クラスに静的なconstexprメンバーのインスタンスはありませんか?
- 2. クラスは別のクラスの静的メンバーとして定義されています
- 3. Aureliaでインポートされた型の静的メンバーにアクセスする
- 4. クラスと派生クラスのインスタンスは、非静的メソッドを介して間接的にクラスの静的メンバーを変更することができます。#
- 5. error:静的メンバーcopyWithZoneは、UIImageView型のインスタンスでは使用できません。
- 6. インスタンス化されたオブジェクトを持たない非静的メンバー関数へのアクセス?
- 7. C++:クラスまたはインスタンスを介してconstメンバーにアクセスできますか?
- 8. 派生型でクラスの静的メンバーを使用していますか?
- 9. クラスの静的メンバーとしてH5 :: CompTypeを初期化する
- 10. クラスの静的メンバーを使用してオブジェクトを作成する
- 11. C++で "クラスの静的メンバーではありません"エラーを取得する
- 12. 非const非静的メンバーは、クラスのインスタンスなしでコンパイル時にアクセスできるのはなぜですか?
- 13. 静的内部クラスは、外部クラスのすべての静的データメンバーと静的メンバー関数にどのようにアクセスできますか?
- 14. 静的メンバー関数は暗黙的にインライン化されたクラス内で定義されていますか?
- 15. PHP - クラスのコンストラクタ内でのオブジェクトのインスタンスの初期化、静的メンバー内でのアクセス
- 16. クラスの静的メンバーの初期化は、そのクラスの静的オブジェクトの初期化前に保証されていますか?
- 17. 派生クラスの静的メンバー値からのPython静的メンバー初期化
- 18. クラスと同じデータ型のクラスで、どのようにして静的メンバーを宣言できますか?
- 19. Javaは、私はいくつかの静的メンバーと静的クラスを持つすべてのインスタンスのリスト
- 20. インスタンス化のないクラスのメンバーのハンドルを取得します。
- 21. クラスのメンバーとしてローカルではない静的変数があります
- 22. クラスはなぜ静的メンバーを持つことが許されますが、非静的メンバーは持てませんか?
- 23. クラスのstatic constメンバーを初期化します。メンバーはプライベートタイプですか?
- 24. インスタンス参照によってアクセスされる静的メンバーのベストソリューション
- 25. constメンバー関数が自分のクラスの静的オブジェクトを変更しました
- 26. コンストラクタの継承されたクラスのメンバーにアクセスできません
- 27. クラスjavax.el.BeanELResolverはjava.util.CollectionsクラスのメンバーにアクセスできませんSpring Boot、JSPのUnmodifiableCollection
- 28. QtのQIconのインスタンスを自分のクラスの静的メンバーとして持つことは可能ですか?
- 29. 継承クラスでオーバーライドされた静的メンバーにアクセスする方法は?ここで
- 30. テンプレートクラスの静的メンバー変数をクラスの静的メンバー変数として宣言/定義/初期化するにはどうすればよいですか?
グローバル変数(静的専用クラスでラップされている)を使用して呼び出されます。 – birryree