2011年10月10日月曜日

[C++] staticメンバ変数・関数とconstメンバ変数・関数

C++を勉強し始めて一週間。
個人的に覚えにくい、イメージしにくい事柄をメモっとく。

- staticメンバ変数
 - staticがついたメンバ変数は、プログラムの実行から終了まで静的領域に確保される
 - インスタンス化された複数のオブジェクトから参照できる


 - cppファイル内で一度だけ初期化される(ファイルスコープ扱いなので)
 - 初期化は、
  - int Hoge::max = ... という感じでクラスの外に書く
  - クラス定義ではできない
  - コンストラクタで初期化してはいけない 
   - オブジェクトが生成されるたびに、staticメンバ変数の初期化が実行されるから

- staticメンバ関数
 - staticメンバ変数にアクセスするための関数
 - thisポインタを持たない
 - オブジェクトを介さなくても使える。 int result = Hoge::get_max()


- constメンバ変数
 - 全てのインスタンスに対して共通にconst : static const int max = ...
 - なのでクラス内で初期化してよい

 - 扱う定数の値をオブジェクトごとに変更したい場合はコンストラクタで初期化する
   - その際は初期化の順序に気をつける
    - オブジェクト生成時に値の無いconstメンバ変数ができてはいけない
    - なので初期化リストを用い、先に初期化をしてからオブジェクト生成
     - Hoge() : max(3) { ... // max(3)は初期化、max = 3は代入

- constメンバ関数
  - その関数を実行しても、メンバ変数の値が変わらないことを保証している関数
  - メンバ変数を変更することはできないし、非constメンバ関数を呼ぶこともできない


実際の所、staticやconstはどの程度利用されるもんなんだろう?

0 件のコメント:

コメントを投稿