C++
 Computer >> コンピューター >  >> プログラミング >> C++

C++のstaticキーワードとは?静的変数と静的関数の使い方を解説

staticキーワードとは

C++において、static(静的)キーワードを付けた変数・データメンバ・関数は、プログラムの開始から終了までの間、メモリ領域が確保され続けます。そのため、プログラムの生存期間全体にわたって値が保持されます。また、静的メンバ関数はオブジェクトを生成しなくても、クラス名を指定して直接呼び出すことができる点も大きな特徴です。

static変数の基本的な性質

static変数には、以下のような特徴があります。

  • 初期化は一度だけ − static変数は実行中に一度だけ初期化され、以降は値が保持され続けます。
  • プログラム終了まで存続 − コンパイラはプログラムが終了するまで変数を保持します。
  • 定義場所は柔軟 − 関数の内側でも外側でも定義できます。関数内で定義した場合、その変数はそのブロックに対してローカルになります。
  • デフォルト値は0 − 明示的に初期化しない場合、static変数の初期値はゼロになります。

staticキーワードの構文

C++におけるstaticキーワードの基本的な構文は次のとおりです。

static datatype variable_name = value;      // 静的変数
static return_type function_name {          // 静的関数
   ...
}

各要素の意味は以下のとおりです。

  • datatype − 変数のデータ型。intcharfloatなど。
  • variable_name − プログラマが任意に決める変数名。
  • value − 変数を初期化する値。省略した場合は0で初期化されます。
  • return_type − 関数が返す値のデータ型。
  • function_name − 任意の関数名。

サンプルコード

それでは、C++におけるstatic変数と静的メンバ関数の使用例を見てみましょう。

#include <bits/stdc++.h>
using namespace std;
class Base {
   public : static int val;
   static int func(int a) {
      cout << "\nStatic member function called";
      cout << "\nThe value of a : " << a;
   }
};
int Base::val=28;
int main() {
   Base b;
   Base::func(8);
   cout << "\nThe static variable value : " << b.val;
   return 0;
}

実行結果

Static member function called
The value of a : 8
The static variable value : 28

コードの解説

上記のプログラムでは、まずクラスBaseの中で、static変数の宣言と静的メンバ関数の定義を行っています。

public : static int val;
static int func(int a) {
   cout << "\nStatic member function called";
   cout << "\nThe value of a : " << a;
}

次に、クラス定義の後かつmain()関数より前の位置で、static変数を次のように初期化しています。クラスのstaticメンバ変数は、クラスの外側で定義・初期化する必要がある点に注意してください。

int Base::val=28;

main()関数内では、Baseクラスのオブジェクトbを作成し、static変数valの値を表示しています。一方、静的メンバ関数func()は、オブジェクトを使わずに、クラス名とスコープ解決演算子「::」を用いて直接呼び出しています。

Base b;
Base::func(8);
cout << "\nThe static variable value : " << b.val;

まとめ

staticキーワードを活用することで、プログラム全体で共有される変数や、インスタンス化なしで呼び出せる関数を実現できます。特にクラス設計において、すべてのオブジェクトで共通のデータを持たせたい場合や、ユーティリティ的な処理を提供したい場合に役立つ重要な機能です。static変数はクラス外部での定義が必要であること、静的メンバ関数はクラス名から直接呼び出せることを覚えておきましょう。

  1. C#のvolatileキーワードとは?マルチスレッドでの使い方を解説

    C#のvolatileキーワードとはC#では、複数のスレッドが同じ変数へ同時にアクセスすることで発生する競合状態(レースコンディション)を軽減するために、volatileキーワードを使用できます。volatileを付けた変数は、コンパイラによるキャッシュなどの最適化が抑制され、常にメモリ上の最新の値が読み書きされることが保証されます。volatileの基本的な使い方publicな変数にvolatileキーワードを付ける例は以下の通りです。class Program { public volatile int a; public Program(int _a) {

  2. C#のstaticキーワードとは?静的メンバーの基本と使い方を実例で解説

    C#では、staticキーワードを使用することで、クラスのメンバーを静的(スタティック)として定義できます。クラスのメンバーをstaticとして宣言すると、そのクラスのオブジェクトをいくつ生成しても、静的メンバーのコピーはメモリ上に1つだけしか存在しないことになります。つまり、staticキーワードは「そのメンバーがクラスに対して1つのインスタンスのみを持つ」ことを意味します。すべてのオブジェクトがこの唯一のコピーを共有するため、静的変数は値が共通して扱われる定数の定義などに適しています。また、静的メンバーにはクラス名を介して直接アクセスできるため、インスタンスを生成する必要がありません。静的