配列の初期化時(new Car[])に引数なしのデフォルトのコンストラクタを呼ばれて各要素が初期化されるようです。
下のプログラムだとメモリの管理がこれで正しいのかいまいち自信がないですがとりあえず動きました。
#include <stdio.h>
class Car
{
private:
char*model;
char*maker;
public:
Car()
{
// ダミーのデフォルトコンストラクタ
puts("デフォルトコンストラクタが呼び出されました。");
this->model = "";
this->maker = "";
}
Car(char*mod, char* mak)
{
this->model = mod;
this->maker = mak;
}
voidPrint()
{
// 情報を出力
printf("メーカー: %s 車種: %s\n", maker, model);
}
};
int main(void)
{
/* 変数の宣言 */
intCarsLength =12; // 配列の長さ
charstr[128]; // モデル名用のバッファ
Car *cars = new Car[CarsLength]; // オブジェクトのポインタ
// ※new Car実行時に各要素がデフォルトコンストラクタで初期化される
for (int i = 0; i < CarsLength; i++)
{
// センチュリー (○○台目)の文字列を生成
sprintf(str, "センチュリー (%02d台目)", i + 1);
// 引数付きのコンストラクタで初期化する
cars[i] = Car(str, "トヨタ");
cars[i].Print();
}
delete[] cars;
return 0;
}
コメント