クラス 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 }
|