next up previous contents
Next: D.10.3 代入演算子 Up: D.10 クラス定義についての注意 Previous: D.10.1 デフォールト・コンストラクター

D.10.2 コピー・コンストラクター

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


next up previous contents
Next: D.10.3 代入演算子 Up: D.10 クラス定義についての注意 Previous: D.10.1 デフォールト・コンストラクター
Masashi Katsurada
平成18年4月28日