質問: 0; i < n; i++) { bcRec[i].setint(i * 10); std::cout << bcRec[i].fooint() << "\r\n"; } } ```
回答: `new BaseClass[n]` とやっても`BaseClass`の配列はできますが`int`の配列にはなりません。`_a`はあくまでも1個の`int`ですので、これを動的配列にする必要があります。 C++での動的配列は、一般的には`vector`を使います。`int _a;`の代わりに`std::vector _a;`と書きます。vectorを使うには`#include `が必要です。そして`BaseClass`のコンストラクタを次のようにします。 ``` BaseClass::BaseClass(int a) : _a(a) { } ``` これは、`_a`を構築するために`std::vector _a(a);`と書きたいところですが、`BaseClass`で自身のメンバ変数を初期化するための記述方法は上記のようになります。メンバ変数の初期化の文法についてはC++の参考書で勉強してください。 メンバ関数`setint`は次のようになります。 ``` void BaseClass::setint(int i, int a) { _a[i] = a; } ``` メンバ関数`fooint`(`getint`?)は次のようになります。 ``` int BaseClass::fooint(int i) { return _a[i]; } ``` `_a`は`vector`ですので、`[]`で読み書きできます。`vector`の使い方は参考書で勉強してください。配列のインデックス値をメンバ関数の第一引数で渡している点を理解してください。 ここまでできれば、`main`関数をどう書き変えればいいかは想像できると思います。とりあえず`BaseClass *bcRec;`は不要なので削除しましょう。あとはご自身で考えてみてください。 以下、改良のための余談。 個数を意味する変数名は`a`より`n`(`number`)の方が相応しいです。同様に、値を意味する変数名は`a`より`v`(`value`)などがいいでしょう。もちろん配列に何を格納するかによって、`value`よりもっと適した意味を持つ単語を使うと良いです。 `fooint`(`getint`)は読み取るだけで書き込みはしませんので`const`をつけるのが理想です。はじめのうちは無くてもいいでしょうが、今後、実用的なプログラムを作るのであれば`const`のテクニックはほぼ必須ですので、参考書で勉強してください。 あと、そもそも`BaseClass`を一切作らずに、`main`関数内で`std::vector array(5);`などと書いてやってみるのも理解の助けになると思います。 クラスメンバの変数を配列にしたいのか(上記の書き方)、オブジェクト(クラスのインスタンス)を配列にしたいのかで書き方が変わります。