static c
例を使用したC ++での静的の重要性と使用。
ストレージクラスに関する以前のトピックでは、静的という言葉を紹介しました。 C ++プログラムで宣言されている静的変数について学びました。静的変数は一度だけ初期化され、プログラム全体で値を保持することがわかっています。
静的変数と同様に、このチュートリアルでは、静的キーワードの使用を次のように拡張します。
- クラス内の静的メンバー変数
- 静的クラスオブジェクト
- 静的メソッドクラス
=> ここで詳細なC ++トレーニングチュートリアルを確認してください。
学習内容:
クラス内の静的メンバー変数
静的変数がスタックに割り当てられることはありません。それらには、異なる静的ストレージ上のスペースが割り当てられます。これは、クラスで静的変数を宣言すると、この変数がそのクラスのすべてのオブジェクトによって共有されることを意味します。
静的変数は一度だけ初期化され、クラスのすべてのオブジェクトによって共有されるため、静的変数がコンストラクターによって初期化されることはありません。代わりに、静的変数は、スコープ解決演算子(::)を使用して、クラスの外部で1回だけ明示的に初期化する必要があります。
最初のオブジェクトが作成されると、他の初期化が存在しない場合、プリミティブ型のすべての静的データはゼロに初期化されます。
クラス内の静的変数を示す次の例を確認してください。
以下のコードに示すように、静的変数はクラスサンプルのメンバーとしてカウントされます。この変数は、クラスの外部で初期値= 0で明示的に初期化されていることに注意してください。
次に、この静的変数をクラスのコンストラクターでインクリメントします。
サンプルプログラムを見てみましょう。
#include #include using namespace std; class sample{ int var; static int count; public: sample(int var):var(var){ cout<<'Count = '< 出力:
カウント= 0
カウント= 1
カウント= 2
main関数では、3つの異なるオブジェクトを作成します。出力では、静的変数の値がオブジェクトの作成間で維持され、オブジェクトの作成ごとにリセットされるわけではないことがわかります。これは、最初のオブジェクトの場合、count = 0です。次に、1にインクリメントされます。次のオブジェクトの場合、count = 1というように続きます。
カウントが通常の変数である場合、出力は次のようになります。
カウント= 0
カウント= 0
カウント= 0
静的クラスオブジェクト
クラスの静的メンバー変数と同様に、クラスオブジェクトを静的として宣言できます。静的クラスオブジェクトも一度だけ初期化され、プログラム全体でアクティブなままになります。オブジェクトはユーザー定義型であるため、静的クラスオブジェクトは、コンストラクターを使用して通常のオブジェクトと同様に初期化されます。
静的クラスオブジェクトをよりよく理解するために、プログラミングの例を見てみましょう。
配列javaから要素を削除する
#include using namespace std; class xyz { int i; public: xyz() { i=0; cout << 'Constructor::xyz'<このプログラムには、コンストラクタとデストラクタを持つクラスxyzがあります。 main関数では、変数x = 0を宣言します。 xがゼロに等しい場合、クラスxyzの静的オブジェクトを作成します。
プログラムは次の出力を提供します。
出力:
コンストラクター:: xyz
メイン終了
デストラクタ:: xyz
通常、出力は
コンストラクター:: xyz
デストラクタ:: xyz
メイン終了
ただし、静的オブジェクトを作成すると、このオブジェクトにはプログラムの最後までスコープがあり、オブジェクトがスコープから外れるとき(ifステートメントの終わり)にはスコープがありません。これが、オブジェクトobjのデストラクタがmain関数の終わりに達した後にのみ実行される理由です。
クラス内の静的メソッド
クラスに静的メソッドを含めることもできます。静的オブジェクトや静的メンバー変数と同様に、静的メンバー関数にも、プログラムの実行が終了するまでスコープがあります。
クラスメソッドが静的として宣言されている場合、静的メンバー、つまりクラスの静的変数と静的関数にのみアクセスできます。クラスの通常のメンバーにはアクセスできません。
また、静的クラスメソッドに使用できる「this」ポインタはありません。
オブジェクトとドット演算子を使用してクラスの静的メソッドにアクセスすることは許可されていますが、これらのメソッドにアクセスするには、クラス名とスコープ解決演算子を使用することをお勧めします。
以下は、クラスで静的メソッドを使用する例です。
この例では、2つの静的メンバー変数AとB、および静的メソッドprintValuesを定義しました。変数AとBは、それぞれ値10と20に初期化されます。静的メソッドprintValuesでは、AとBの値はそれぞれpostIncrementとpreIncrementを受けます。その後、値が出力されます。
mainメソッドでは、静的関数を呼び出すためのオブジェクトが必要ないため、クラス名を使用して静的メソッドprintValuesを直接呼び出します。
#include using namespace std; class Sample { static int A; static int B; public: static void printValues(){ A++; ++B; cout <<'Value of A: ' << A << endl; cout <<'Value of B: ' << B << endl; } }; int Sample :: A =10; int Sample :: B =20; int main(){ Sample::printValues(); return 0; } 出力:
Aの値:11
Bの値:21
同じ出力のスクリーンショットを以下に示します。

したがって、出力では、両方の静的変数の値が、それらに対して実行された操作に従って変更されていることがわかります。
静的関数の目的
このチュートリアルでキーワードstaticのさまざまな使用法を見てきましたが、静的関数の目的は何かという疑問が残ります。
EclipseでJavaアプリケーションを開発する方法
静的関数の目的は次のように要約できます。
- 静的関数は、その関数が呼び出しと作業のためにオブジェクトに依存しない場合に使用します。
- 静的関数を使用するさらに別の目的は、その使用を制限することです。グローバル関数とは異なり、静的関数へのアクセスは、それらが配置されているファイルに制限されます。したがって、関数へのアクセスを制限するために、静的関数にします。
- 上記の2つの理由とは別に、クラスのメンバーを参照していない関数を実行するためだけにクラスのオブジェクトを作成したくない場合は、静的関数を使用します。
結論
このトピックを締めくくるには、C ++のstaticキーワードをさまざまな方法で使用して、変数、メンバー変数、クラスオブジェクト、メソッドなどを宣言できると言えます。
静的メンバー関数と変数は、オブジェクトを使用してアクセスする必要はありません。クラス名を使用して直接アクセスできます。また、静的エンティティのスコープは、プログラムの実行中ずっと残ります。したがって、staticキーワードを使用して、特定のエンティティのアクセスを制御することもできます。
今後のチュートリアルでは、C ++の他のいくつかのOOPトピックについて詳しく学習します。
=> ここでC ++トレーニングチュートリアルのA〜Zを確認するには、ここをクリックしてください。
推奨読書
