2010-12-04 16 views
0

私は、Multinumber型のものを多態的に保持して管理できる設定クラスを持っています。これは、Pair、Rational、またはComplexタイプのオブジェクトにすることができます。私が実行している問題は、このクラスは動的なメモリ管理が必要であり、多くの場合、以下のような関数のように、どのタイプを割り当てるべきか分かりません。セットは型にとらわれないので、Multinumber * var = new Complex、Rational、またはPairを実行するはずです。私が最初に追加しているもののタイプをチェックしたり、この情報をスライス効果なしで別のデータタイプに保存する方法はありますか?私はこの問題を持っている一つの機能はこれです:多型データ型に動的にメモリを割り当てるにはどうすればよいですか?

bool Set::addElement(Multinumber* newElement) 
{ 
    bool success = false; 
    if(isFull()) 
    { 
     resize(); 
    } 
    if(!isMember(newElement)) 
    { 
     setArray[numElements] = newElement; 
     numElements++; 
     success = true; 
    } 
    return success; 
} 

は編集:私は、このようなオペレータ+が呼び出されるとすぐに送信しなければならない場合など、この私はおそらく割り当てることができだけ場所での状況について話していますここにオブジェクトがあり、呼び出し元のクラスはその型が何であるか分からない。私のコードではSetオペレータ+オーバーロードで発生します。なぜなら、私はSetが何を格納しているのか分からないからです。

+1

'setArray'に*ポインタ*を格納しているようですが、これは問題ありません。あなたは何を持っているのですか? –

答えて

1

ここに割り当てられる理由はわかりません。しかしそれとは別に、virtual cloneイディオムを使用してください。

+0

完璧に働いた!ありがとう! –

1

あなたは、以下のようnewElementの実際のクラスの種類を確認するために型ID演算子を使用することができます。

if (typeid(*newElement) == typeid(Complex)) 
{ 
    setArray[numElements] = new Complex; 
    // anything else 
} 

はsetArrayはMultinumberの配列でなければなりません*。

+0

割り当てにtypeidを使用することはできません –

+0

setArrayはMultinumber型の配列です。 –

+0

なぜtpはtypeid、Rossを使用できませんか? – Exia

関連する問題