将指针数组的元素添加到整数对象

时间:2016-09-19 13:22:45

标签: c++ arrays

我很难做到这一点。 基本上我有一个名为“整数”的类,它来自一个名为“Item”的抽象基类。 我试图将指向数组的所有元素添加到整数对象,如下所示:

class Item
{
public:
    virtual void print() = 0; 
    virtual string getType() = 0; 
    virtual Item* add(Item *item) = 0; 
};

class integer: public Item {
private:
    int data;
public:
    integer(int _data): data(_data){;}
    void print () {
        cout << data << "\n";
    }
    string getType() {
        return "INTEGER";
    }
    integer* add(Item *item) {
        if(this -> getType() != item -> getType()) {
            throw "TYPE MISMATCH" ;
        }   
        integer* tempInt = dynamic_cast<integer*>(item);
        return new integer(this -> data + tempInt -> data);
    }
};

void printAll(Item** items, int n) {
    for(int i = 0; i < n; ++i)
        items[i] -> print();
}

void addPrintAll(Item ** items, int n) {
    Item* p = items[0];
    for(int i = 1; i < n; i++) {
        p = p -> add(items[i]);
    }
    p -> print();
}

void main()
{   
    int n = 10;
    Item **integers = new Item*[n]; 
    Item **strings = new Item*[n]; 

    // populate lists
    for (int i = 0; i < n; i++)
    {
        integers[i] = new integer(i);
    }

try
    {
        printAll(integers, n);      // print integers
        addPrintAll(integers, n);   // add integers
    }
    catch(char *e)
    {
        cout << e;
    }
}

现在在addPrintAll函数的那一行:

p = p -> add(items[i]);

我在p上反复调用new运算符而不删除,从而导致内存泄漏。 有没有更好的方法呢?

1 个答案:

答案 0 :(得分:1)

您可以为该类实现运算符+ =()。在项目中它将是未定义的:

virtual Item& operator+=(Item& other) = 0;  

在整数类中实现它:

Item& operator+=(Item& other) {
    if(other.getType() != getType()) {
        throw "TYPE MISMATCH" ;
    }
    data += dynamic_cast<integer&>(other).data;
    return *this;
}

在main中,在try块内部,使用它:

    integer sum(0);
    for(int i = 0; i < n; ++i)
        sum += *integers[i];
    sum.print();