コンストラクタ

  コンストラクタ構築子constructor )は,オブジェクトを初期化する目的で作成するクラスと同じ名前を持った特別なメンバー関数です.コンストラクタを持つクラスのインスタンスを生成すると,コンストラクタが自動的に呼び出され,オブジェクトを初期化します.初期化は,代入文やメンバー初期設定リストを使用して行われます(例参照).

  コンストラクタは関数ですから,通常,引数を持っています.従って,オブジェクトの宣言の際に,必ず,引数も与えてやる必要があります.ただし,コンストラクタが定義されていない場合や引数のないコンストラクタが定義されている場合は別です(今まで述べてきた例は,これに相当します).

  C/C++ に対するプログラム例 7.6 においては,Example 型オブジェクト t1,および,*t2 を定義した後,
t1.v_set1();
t2->v_set2();		
とうい方法で,メンバー関数 v_set1,および,v_set2 を呼び出し,メンバー変数 x,y の値を設定していました.しかし,関数 v_set1,および,v_set2 の代わりに,
Example(int x, int y)
{
	this->x = x;
	this->y = y;
}		
のようなコンストラクタを用意しておけば,
Example t1(10, 20);   // Example 型オブジェクト
Example *t2 = new Example (30, 40);   // Example 型オブジェクトへのポインタ		
という記述だけで,オブジェクトの定義と初期設定が済んでしまいます.なお,this は,オブジェクト自身を示す演算子(オブジェクト自身に対するポインタ)であり,「 this->x 」は,クラス Example 内に「 int x; 」と定義されている変数 x を指します.なお,
Example(int x1, int y1)
{
	x = x1;
	y = y1;
}
	// 以下のように,メンバー初期設定リストを使用しても良い
Example(int x1, int y1) : x(x1), y(y1) {}		
のように,引数の名前を変えてやれば,this を使用せずに記述可能です.

  デストラクタ消滅子destructor )は,オブジェクトを消滅させる目的で作成する特別なメンバー関数であり,「~クラス名」という関数名に決まっています.デストラクタに引数を渡したり,デストラクタから値を返したり,また,デストラクタの多重定義をするなどのことはできません.

  大きさの決まっていないデータを扱うためには,オブジェクト内で new 演算子によりメモリを確保する方法が一般的です.このメモリの確保をコンストラクタの中で行うと,プログラムが非常に書きやすくなります.さらに,確保したメモリは,必要が無くなれば解放してやらなければなりませんが,この処理もデストラクタを使用すれば自動的に行ってくれます.

  通常,コンストラクタやデストラクタは,public より後ろで宣言します.勿論,他の関数と同様,クラス内では宣言だけを行い,本体をクラス外に記述することも可能です.