C++ static 静的メンバ変数の使い方

グローバルな領域(大域)に静的変数や静的関数を作る事はできましたが、
クラス内にも静的メンバ変数静的メンバ関数を作る事ができます。

キーワードは、グローバルな領域に作る時と同じようにstaticを付けます。

ここでは、静的メンバ変数の説明をしています。
通常の静的変数の説明はコチラ
また、静的メンバ関数の説明はコチラです。

静的メンバ変数

クラスの中にstatic付きの変数を宣言すれば、静的メンバ変数となります。

この静的メンバ変数は、同じクラスの複数のインスタンスがあっても
1つしか存在しない変数です。

複数のインスタンスがある場合、静的メンバ変数は共有されます。

記述例

ファイル名:hito.h

class hito {
public:
int age;

static int sint;

};

ファイル名:hito.cpp

#include "hito.h"

int hito::sint = 0;

静的メンバ変数は、ヘッダファイル内にstatic付きで定義します。

この時は、初期化はできない事になっています。注意してください。

ヘッダファイルでの静的メンバ変数定義だけでは、実体は作られません。

実体を作るには、ソースファイル内で宣言する必要があります。

また、ソースファイル内での宣言時のみ、初期化する事ができます。

初期化しなくても問題はありません。

また、この時、キーワードstaticを付ける必要はありません。

と言うか、付けてはいけません。(コンパイルエラーが出ます。)

スポンサーリンク

使用例

先程のヘッダファイル:hito.hと
ソースファイル:hito.cppが組み込まれているモノとして説明します。

ファイル名:main.cpp

#include "hito.h"

void main() [
      hito a;
      hito b;

      a.sint = 10;
      b.sint = 20;
      hito::sint = 30;
}

この例では、クラスhitoの静的メンバ変数:sintに代入する例です。

3つの代入が行われていますが、全て同じ変数に代入している事になります。

クラスのメンバ変数なのだから、その静的メンバ変数が存在するクラスの
インスタンスを複数つくれば、別々に複数個の静的メンバ変数が作られて、
複数個使える。

と思うかもしれませんが、そうではありませんので注意して下さい。

クラスのインスタンスがある場合は、インスタンス名.静的メンバ変数名
アクセスできますが、
クラスのインスタンスがない場合でも、クラス名::静的メンバ変数名とすれば、
アクセスできます。