コンストラクタは、クラスのインスタンス作成時に自動的に呼ばれ、
クラスのメンバ変数の初期化などに用いられました。
その際、コンストラクタの引数には、
定数、変数などの値を使用する事ができました。
コンストラクタには、コピーコンストラクタと言うコンストラクタもあり、
これは、同じクラスオブジェクトを使って初期値する機能です。
普通の変数の初期化で例えると次のような考え方になります。
int a = 10; // int型変数aを宣言し、10で初期化する。
int b = a; // int型変数bを宣言し、同じint型変数aで初期化する。
通常のコピーコンストラクタは、
引数に同じクラスオブジェクトの参照を用います。
クラスhitoのコピーコンストラクタ例
hito::hito(const hito &object) {
初期化コード
}
コピーコンストラクタ使用例
ファイル名:hito.h
class hito {
public:
int age;
int sinchou;
int taiju;
// コンストラクタ
hito(int age = 0, int sinchou = 0, int taiju = 0);
// コピーコンストラクタ
hito(const hito &object);
};
ファイル名:hito.cpp
#include "hito.h"
// コンストラクタ
hito(int age, int sinchou, int taiju) {
this->age = age;
this->sinchou = sinchou;
this->taiju = taiju;
}
// コピーコンストラクタ
hito(const hito &object) {
this->age = object.age;
this->sinchou = object.sinchou;
this->taiju = object.taiju;
}
ファイル名:main.cpp
#include "hito.h"
void main(void) {
hito satou(20, 170, 60); // コンストラクタ呼び出し
hito suzuki(satou); // コピーコンストラクタ呼び出し
// hito suzuki = satou;と
// 書いてもOK
}
この例では、クラスhitoのコピーコンストラクタの動作確認をしています。
まず、クラスhitoのインスタンスsatouを作成しています。
この時は、通常通り、コンストラクタが呼び出され、
satou.age、satou.sinchou、satou.taijuに、それぞれの値で初期化されます。
次に、クラスhitoのインスタンスsuzukiを作成しています。
この時は、コピーコンストラクタが呼び出され、
suzukiのメンバ変数は、satouのメンバ変数の値で初期化される事になります。