クラス T のオブジェクト x を宣言すると同時に、 既に生成されているオブジェクト y を用いて初期化するには、 T x(y); のように宣言する。 この場合、クラス T のコピー・コンストラクターが呼ばれる。 それは T(const T&) という宣言をして作られる。 ここで const は絶対必要である。
copy-constructor.C |
1 #include <iostream.h> 2 3 class Vector { 4 private: 5 int dim; 6 double *body; 7 public: 8 Vector(int n) { 9 cout << "constructor" << endl; dim = n; body = new double [dim]; 10 } 11 Vector() { cout << "default constructor" << endl; dim = 0; body = 0; } 12 ~Vector() { cout << "destructor" << endl; delete [] body; } 13 int dimension() { return dim; } 14 double& element(int i) const { return body[i]; } 15 // コピーコンストラクター 16 Vector(const Vector&); 17 }; 18 19 Vector::Vector(const Vector& x) 20 { 21 cout << "copy constructor" << endl; 22 dim = x.dim; 23 body = new double [dim]; 24 for (int i = 0; i < dim; i++) 25 body[i] = x.element(i); 26 } 27 28 int main() 29 { 30 const int n = 3; 31 int i; 32 Vector c; 33 Vector a(n); 34 for (i = 0; i < n; i++) 35 a.element(i) = i; 36 for (i = 0; i < n; i++) 37 cout << a.element(i) << endl; 38 Vector b(a); 39 for (i = 0; i < n; i++) 40 cout << b.element(i) << endl; 41 } |