2011-12-08 1 views
0

現在、私はBag抽象データ型を実装しようとしている課題に取り組んでいます。以下はオブジェクトが返されたときにC++の動的配列がクリアされました

は、私は現在、実装しようとしている方法である:

template <typename T> 
Bag<T> Bag<T>::operator+ (const Bag<T>& bag) { 
    int sizeofCurrentMultiset = cardinality_; 
    int sizeofPassedMultiset = bag.cardinality_; 
    int totalSize = sizeofCurrentMultiset + sizeofPassedMultiset; 

    Bag<T> newBag(totalSize); 

    for (int i = 0; i < sizeofCurrentMultiset; i++) { 
     newBag.insert(array_[i]); 
    } 

    for (int i = 0; i < sizeofPassedMultiset; i++) { 
     newBag.insert(bag.array_[i]); 
    } 

    return newBag; 
} 

私は動的配列としての要素を格納しています。

私の問題は、新しいバッグが返されたときに、カーディナリティーを細かく印刷できることです(元のバッグにはそれぞれ2つの要素があります)。しかし、動的配列には数字が含まれていません-1789102などの乱数)。しかし、バッグが返される前に要素をプリントアウトしようとすると、うまく印刷されます。

疑いの余地はありませんが、私は助けに感謝します。

ありがとうございました。

+1

このコードは正常です。問題はあなたの 'insert'メソッドにある可能性があります。もし' insert'がコピーセマンティクスを使っているなら、あなたのコピーコンストラクタにあるかもしれません。 –

+0

すべてを印刷するためのコードを投稿できますか? – Mythli

+4

'Bag'のコピーコンストラクタを作成しましたか?あなたがデフォルトのコピーコンストラクタを取得しているように思えます。 –

答えて

2

Bagクラスのコピーコンストラクタを作成する必要があります。あなたのクラスの浅いコピーだけを行うデフォルトのコンストラクタを取得しているように見えます。このため、cardinalityのメンバーは大丈夫ですが、動的配列はありません。コピーコンストラクタは、operator+関数がBagオブジェクトを返すときに呼び出されます。

関連する問題