いつもお世話になります。現在 C/C++で開発を行っています。
そこで質問があります。現在あるクラス(ClassAAA)を作成し、別のクラス
(ClassBBB)からオブジェクトを作成しています。オブジェクトは動的配列で
確保しています。
ClassAAAのコンストラクタはオーバーロードして引数でint型の変数を
受け取る形をとっていますが、下記のようにオブジェクトを宣言するとエラーが
でてしまいます。
コンストラクタが実行されるのは領域を確保したときですよね??だから
下記のようにしたのですが、どのように記述すればよろしいのでしょうか??
<ClassBBB内のメソッド>
int x =5;
コンパイルエラーの行
objAAA = new ClassAAA[10](int x);
初心的なことだと思うのですがよろしくお願いします。
クラスの配列を動的に作成する場合、常にデフォルトコンストラクタで初期化されま
す。
配列newの場合デフォルトコンストラクタが使われるので10個の要素を'5で初期化'なんてのは
無理です。
vector使えばやれますけど。
#include <iostream>
class ClassAAA {
int value_;
public:
explicit ClassAAA(int x) : value_(x) {}
friend std::ostream& operator<<(std::ostream& stream, const ClassAAA& a) {
return stream << '(' << a.value_ << ')';
}
};
#include <vector> // vector
#include <iterator> // ostream_iterator
#include <algorithm> // copy
int main() {
std::vector<ClassAAA> objAAA(10,ClassAAA(5)); /// ClassAAA(5)を10個
std::copy(objAAA.begin(), objAAA.end(),
std::ostream_iterator<ClassAAA>(std::cout, ));
}
/* 実行結果
(5) (5) (5) (5) (5) (5) (5) (5) (5) (5)
*/
シャノンさん。επιστημη さん。ありがとうございます。
まだまだ 理解不足で申し訳ありませんでした。もっと
クラスの理解について勉強していきたいと思います。
ありがとうございました。