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;
}

编辑:我说的是这是我唯一可以分配的地方的情况,例如当调用 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 回答