オブジェクトの作成とコンストラクタ – プログラミング – Home

オブジェクトの作成とコンストラクタ
 
通知
すべてクリア

[解決済] オブジェクトの作成とコンストラクタ


モウ
 モウ
(@モウ)
ゲスト
結合: 20年前
投稿: 2
Topic starter  

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

<ClassBBB内のメソッド>

int x =5;

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

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


引用未解決
トピックタグ
aetos
(@aetos)
Noble Member
結合: 5年前
投稿: 1480
 

クラスの配列を動的に作成する場合、常にデフォルトコンストラクタで初期化されま
す。


返信引用
επιστημη
 επιστημη
(@επιστημη)
ゲスト
結合: 22年前
投稿: 1301
 

配列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)
*/


返信引用
モウ
 モウ
(@モウ)
ゲスト
結合: 20年前
投稿: 2
Topic starter  

シャノンさん。επιστημη さん。ありがとうございます。
まだまだ 理解不足で申し訳ありませんでした。もっと
クラスの理解について勉強していきたいと思います。
ありがとうございました。


返信引用

返信する

投稿者名

投稿者メールアドレス

タイトル *

プレビュー 0リビジョン 保存しました
共有:
タイトルとURLをコピーしました