クラス定義,オブジェクトの生成・初期化と消去・後始末 |
●オブジェクトとクラスの定義の基礎の復習
●メンバ関数の基本事項
※メンバ関数とは,Javaで言うところのメソッドのことである。
※constメンバ関数は,オブジェクトの状態を変更しないことが保証されるので,
const指定されたオブジェクトに対しては,
constメンバ関数しか呼ぶことが出来ない。
●フレンド関数
非公開なメンバは,他のクラスから隠されているが,特別に他のクラスのメンバ関数に,非公開なメンバへアクセスする許可を
与えることができる。許可を与えられたメンバ関数をフレンド関数と呼ぶ。
※フレンド関数は便利だが,濫用するとメンバを非公開にして護っている意味が無くなるので注意すること。
●staticなメンバ
Javaと同じ様に,各オブジェクトに属さず,クラスに属するstaticなメンバ(Javaで言うところのstaticフィールド,staticメソッド)
を定義できる。メンバの宣言・定義の前にキーワード static をつければ良い。(staticなメンバの性質は,おおむねJavaと同じ)
●コンストラクタ
オブジェクトの生成とコンストラクタの呼び出しは,主に Fig.4.8-(b)で行われる。つまり,オブジェクトは基本的にnew演算子で
動的に生成するのが良い。他は,困った時の参考の為に示す。
●デストラクタ
オブジェクトが消える時(動的に生成したオブジェクトをdeleteで消去する時など)の直前に自動的に呼ばれる特殊なメンバ関数。
たとえば,そのオブジェクトがオープンして使用していたファイルをクローズしたり,動的に確保して利用していたメモリをdelete
で解放するなどの処理を行う。
●モジュール例(スタッククラス)
今回学習した内容の復習として,スタッククラスをモジュール化した例を示す。
stack3.hpp stack3.cpp
この例では,クラス Stack のメンバ関数はコンストラクタ・デストラクタ含めてインライン関数として定義しているので,
ヘッダファイルで定義を行っている。これらの関数を非インライン関数として定義するなら,各メンバ関数の定義は
モジュールソースファイル(stack3.cpp)で定義する必要がある。