グローバルな領域(大域)に静的変数や静的関数を作る事はできましたが、
クラス内にも静的メンバ変数や静的メンバ関数を作る事ができます。
キーワードは、グローバルな領域に作る時と同じように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つの代入が行われていますが、全て同じ変数に代入している事になります。
クラスのメンバ変数なのだから、その静的メンバ変数が存在するクラスの
インスタンスを複数つくれば、別々に複数個の静的メンバ変数が作られて、
複数個使える。
と思うかもしれませんが、そうではありませんので注意して下さい。
クラスのインスタンスがある場合は、インスタンス名.静的メンバ変数名で
アクセスできますが、
クラスのインスタンスがない場合でも、クラス名::静的メンバ変数名とすれば、
アクセスできます。