サイトアイコン ツナのエンジニアブログ

静的メンバ

静的メンバとは

このページでは静的メンバについて解説していきます。

メンバ変数、メンバ関数はどちらもインスタンス特有の変数、関数でしたね。
詳しくはクラスの定義を参照。
https://tunasalmon.com/2018/12/18/%e3%82%af%e3%83%a9%e3%82%b9%e3%81%ae%e5%ae%9a%e7%be%a9/

ですが静的メンバはクラス特有のメンバとなります。
すなわち、インスタンスを生成せずに参照することが出来るメンバということです。

静的メンバはstatic修飾子を付けることで定義できます。

静的メンバ変数

静的メンバ変数は、インスタンスではなくクラス固有の変数です。
インスタンスを生成しても新たに増えることはありません。

以下のように定義します。

static 【型名】 【メンバ変数名】;

実例はこのようになります。

static int a;

参照するには以下のように行います。

【クラス名】::【静的メンバ変数名】

インスタンスを生成しないのでドットやアロー演算子は不要です。

myClassの静的メンバ変数aを参照するとこのようになります。

myClass::a;

メンバがpublicならソースコード内全てから、privateならそのクラスのメンバ関数からのみアクセスすることができます。

静的メンバ関数

静的メンバ関数の場合も変数と同様です。

以下のように定義します。

static 【型名】 【メンバ関数名】();

実例はこのようになります。

static int a();

参照するには以下のように行います。

【クラス名】::【静的メンバ関数名】();

myClassの静的メンバ関数aを参照するとこのようになります。

myClass::a();

静的メンバ関数は、処理を記述する際に2つの制限があります。

①クラス内のstaticでないメンバにアクセスできない。

インスタンスを生成しなくてもアクセスできるという性質上、各インスタンス固有の値にはアクセスすることができません。

②thisポインタを持たない。

thisポインタは呼び出すインスタンス自身のアドレスなのでこちらも当然存在しません。

静的メンバを使えば、クラスで共通する内容を実装することが出来ます。
定義したデータが共通して使うことが出来ないか考えてみると良いでしょう。



(adsbygoogle = window.adsbygoogle || []).push({});

モバイルバージョンを終了