0

Multinumber 型のあらゆるものをポリモーフィックに保持および管理できるセット クラスがあります。これは、タイプ Pair、Rational、または Complex のオブジェクトにすることができます。私が直面している問題は、このクラスには動的なメモリ管理が必要であり、多くの場合、以下の関数のように、どの型を割り当てればよいかわからないことです。セットは型にとらわれないため、Multinumber* var=new Complex、Rational、または Pair を実行する必要があるかどうかはわかりません。最初に追加するもののタイプを確認する方法、またはスライス効果なしでこの情報を別のデータタイプに保存する方法はありますか? 私がこの問題を抱えている関数の1つは次のとおりです。

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

編集: operator+ が呼び出され、すぐにオブジェクトをここに送信する必要があり、呼び出し元のクラスが型を知らない場合など、これが割り当て可能な唯一の場所である状況について話しています。Set operator+ オーバーロードのコードで発生します。これは、Set が格納しているものがわからないためです。

4

2 に答える 2

1

以下のようにtypeid演算子を使用して、newElement の実際のクラス タイプを確認できます。

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

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

于 2010-12-04T04:11:14.010 に答える
1

なぜここに割り当てるのかわかりません。ただし、それとは別に、仮想クローンのイディオムを使用してください。

于 2010-12-04T04:14:04.947 に答える