Cpp クラス 静的メンバ関数 新しいページはコチラ
提供: yonewiki
(ページの作成:「<table class="mbox-small" style="border:1px solid #aaa; background-color:#f9f9f9; width:22em;" id="RealTitleBanner"> <tr> <td style="width:1px;"></td> <td class="mbox-tex...」) |
(→静的メンバ関数) |
||
8行: | 8行: | ||
<br /> | <br /> | ||
== '''静的メンバ関数''' == | == '''静的メンバ関数''' == | ||
+ | 静的メンバ変数と同じようなで静的メンバ関数があります。これもクラスが実体化されていなくても呼び出せるもので、静的メンバ変数は呼び出せるオブジェクト変数としての役割でしたが、ここでは呼び出し可能な関数であるということになります。実体化されていないメンバ関数は実体がないのですから、通常の静的ではないメンバ変数や関数は呼び出すことが出来ません。実体化されていないのですから、まだコンストラクタも動作していなければメンバ変数の初期化もされていないし、もし実体化されていたとしても、実体ごとに異なる値を保持していても区別して呼び出す方法、静的なメンバ関数の内部からは外部で生成されたであろう、クラスの実体を参照することは出来ないし、予測もできないので、通常のメンバ変数やメンバ関数が呼び出せないのは、ごく自然なことです。 | ||
+ | |||
+ | |||
+ | 静的なメンバ関数の関数内部の処理で、静的なメンバ変数を参照することは可能です。それって、普通の関数とどう違うの?なんかいいことあるの?って思える人もいるかもしれません。普通の関数と違う利点はほとんどありません。ただし、クラス内部にグローバルな関数を置くことで、クラスを利用するときに必要になるような関数をひとまとめにして提供することができます。いわゆるセットものです。クラスを使うなら、クラスが提供するグローバル関数も使えるよ。っていうことです。呼び出し方は、静的メンバ変数同様に名前解決スコープ演算子を利用して呼び出す必要があります。 | ||
+ | |||
+ | |||
+ | なので、静的メンバ関数の特徴は | ||
+ | *クラスとセットにできるグローバル関数が作れる。 | ||
+ | *クラスに関係ある処理を準備できる。 | ||
+ | *同一クラス内部メンバ関数やメンバ変数は利用できない。 | ||
+ | *静的メンバ関数内部の処理で静的メンバ変数や静的メンバ関数を利用できる。 | ||
+ | ということになります。ただし、メンバ関数の処理内部でクラスの実体を生成させてあれば、その実体のメンバ関数や、メンバ変数は利用できます。あたりまえですね。メンバ関数内でint型の変数を作るのも当然できるわけですし、その他の型の変数や、構造体、クラス、メンバ関数が定義されているクラス自体の変数を利用することはできるわけです。 | ||
+ | |||
+ | |||
+ | むしろ、そのクラス自体の変数を利用するような、静的メンバ関数が作られることの方が多いです。なぜなら、クラスとセットにするべきグローバル関数というのは、そのクラスに必要不可欠な存在である関数でありながら、実体化されなくてもいつでも使えるようにしておかなければならないようなものなのです。したがって引数にそのクラス自身の型を必要とするような関数が定義されるのは、すごく一般的です。たとえば、クラスを実体化する必要はないけど、引数だけ受け取って、そのクラスの中で扱われているメンバ変数のソートをして、メンバ変数にその順番をセットしたりする関数といったものになります。クラスに必要な関数とはそういった機能をもつ関数であることがほとんどです。 | ||
+ | |||
+ | |||
+ | では、実際に使い方を具体的に見てみましょう。 |