C++の本を読みながら勉強。4ページ。
クラスのコンストラクタに複数の引数があるときは次のような感じで初期値を設定してオブジェクトの配列を作成できる。
#include <iostream> using namespace std; class Point { int m_x; int m_y; public: Point(int x, int y) { m_x = x; m_y = y; } void Disp(void) { cout << m_x << ' ' << m_y << "\n"; } }; int main() { Point p[4] = { Point(1,2), Point(3,4), Point(5,6), Point(7,8), }; for(int i=0; i<4; i++) p[i].Disp(); }
普通に1つの場合を並べる感じでできる。
しかし、このようにあらかじめ個数や値が分かっているような場合はいいけど、newなどで動的に確保する場合は?
コンストラクタが複数の引数を持つクラスのオブジェクトの配列の作成はどのようにしたらよいのだろうか?というか、そもそも引数の値自体をどうやって指定する?
上のコードに次のコードを追加してコンパイル。
Point* p = new Point[4];
すると
クラス、構造体、共用体に既定のコンストラクタがありません。
とエラー。既定のコンストラクタとは引数なしのコンストラクタのこと。デフォルトコンストラクタ。
やっぱりnewで動的に確保する場合には引数ありのコンストラクタではできないということか。