構造体やクラスのインスタンスを直接関数の引数に渡したり, 関数の返値にしたりする場合を考えてみよう.
Point home(Point x)
{
x.move_to(0,0);
return x;
}
...
Point p(10,20,1);
Point q = home(p);
さっき定義したPointには引数のないコンストラクタが
定義されていないので,このままだとPoint qの部分がエラーになるが,
それはここでは置いておく.
この例で,home(p)を呼び出す場合,次のような処理が行われている.
class Point : public GraphicObject {
....
public:
Point(Point& x); // コピーコンストラクタ
};
コピーコンストラクタは,自分と同じ型への参照を引数として持つ. クラス定義の中でコピーコンストラクタを定義しない場合,「各メンバ 変数の値をそれぞれコピーする」という動作をするコピーコンストラクタが 暗黙に定義される.それではすまない場合は,コピーコンストラクタを 自分で定義しなくてはならない.