オブジェクトの作成とコンストラクタ

[戻る]
モウ 2005/04/24(日) 18:26:32
 いつもお世話になります。現在 C/C++で開発を行っています。
そこで質問があります。現在あるクラス(ClassAAA)を作成し、別のクラス
(ClassBBB)からオブジェクトを作成しています。オブジェクトは動的配列で
確保しています。
 ClassAAAのコンストラクタはオーバーロードして引数でint型の変数を
受け取る形をとっていますが、下記のようにオブジェクトを宣言するとエラーが
でてしまいます。
 コンストラクタが実行されるのは領域を確保したときですよね??だから 
下記のようにしたのですが、どのように記述すればよろしいのでしょうか??

<ClassBBB内のメソッド>

    int x =5;

  コンパイルエラーの行
  objAAA = new ClassAAA[10](int x);   


初心的なことだと思うのですがよろしくお願いします。

シャノン 2005/04/24(日) 19:13:50
クラスの配列を動的に作成する場合、常にデフォルトコンストラクタで初期化されま
す。

επιστημη 2005/04/25(月) 10:16:20
配列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)
*/

モウ 2005/04/25(月) 19:46:03
[[解決]]
シャノンさん。επιστημη さん。ありがとうございます。
まだまだ 理解不足で申し訳ありませんでした。もっと
クラスの理解について勉強していきたいと思います。
ありがとうございました。

古いスレッドには追加発言できません。