class A { int *p; std::size_t size; public: A(int i = 0) : p(new int[i]) {} ~A() {delete []p;} A &operator=(const A &ca) { idelete []p; p = new int[ca.size]; std::copy(ca.p, ca.p+ca.size, p); return *this; } void Init(int i = 0) {*this = A(i);} };
本当に配列の要素をコンストラクタで初期化したい場合は初期化リストで明示的にやるしかない。 Book mine[2] = { Book("Book",20,"Blue"), Book("Book",20,"Blue") };
で、単に何らかの値で初期化しておきたい場合には、デフォルトコンストラクタを使うこともできる。 配列の初期化に初期化子を用いない場合、デフォルトコンストラクタがその初期化に用いられる。 class Book ではユーザ定義のコンストラクタが存在するため、デフォルトコンストラクタも明示的に 定義する必要がある。