はいclass1 & class2はグローバル変数です。
グローバル変数とは何ですか?
ブロック外で宣言された変数はグローバル変数と呼ばれます。グローバル変数にはプログラム範囲があります。つまり、プログラム内のどこにでもアクセスでき、プログラム終了時にのみ破壊されます。
グローバル変数はプログラムスコープを持つため、複数のファイルにまたがって使用できます。別のファイルで宣言されているグローバル変数を使用するには、前方宣言またはヘッダーファイルとextern
キーワードを使用する必要があります。 Externは、新しい変数を宣言するのではなく、他の場所で宣言されている変数を参照していることをコンパイラに伝えます。
C++ OOプログラミングでは、ファイル内のどのクラスのメンバー関数でもアクセスできるため、これらを使用することをお勧めしますか?通常
ので、人々はグローバル変数を使用します。彼らはC++の変数通過力学を理解していない、または、彼らは怠け者だ
- 。
- プログラム全体で使用する必要のあるデータを保持する(設定など)。呼び出し元/呼び出し先の関係(例えば、マルチスレッドプログラムを)持っていないコードの間でデータを渡すために
しかし、グローバル変数は悪です!
なぜですか?
単純な理由から、プログラムの複雑さが多岐にわたっています。
グローバル変数が変更されるのを追跡するのは、複数のファイルのどこでも変更できるため、追跡するのは難しいです。
マルチスレッドプログラムでは、複数のスレッドがこれらのグローバル変数を獲得しようと競争する可能性があります。したがって、これらのグローバル変数は、何らかの同期メカニズムによって常に保護される必要があります。通常、システム全体を理解していない限り、そのような仕組みを理解して記述することは難しいです。
質問がありましたので、
静的変数とは何ですか?
static変数は、キーワードstatic
で修飾される変数です。
静的変数とグローバル変数との違いは何ですか?
考慮すべき重要な差別化ポイントは:
スコープ:オブジェクトの
スコープオブジェクトがアクセスされて、この位置で(その名前によって知られている)表示されているかどうか..
静的変数は、定義されているブロックに対してローカルですが、グローバル変数はプログラム全体の任意のファイルからアクセスできます。
[グローバル変数が間違っていますか?](http://stackoverflow.com/questions/484635/are-global-variables-bad) –
重複していることに注意してください。それらがグローバルであるかどうかの問題ではありません。 –
注: "グローバルな名前空間で宣言された名前(すなわち、TUの最も外側の宣言的な領域)は* global *と言われていますが、この用語は名前空間スコープの名前を記述するために間違って使われることがあります。 –