2016-09-19 111 views
-1

我正在艱難的時候這樣做。 基本上我有一個叫做「整數」的類,它是從一個名爲「Item」的抽象基類中派生出來的。 我試圖加起來指針數組的所有元素Integer對象如下:將指針數組的元素添加到整數對象中

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上的運算符沒有刪除,從而導致內存泄漏。 有沒有更好的方法來做到這一點?

+0

使用'STD ::矢量和智能指針。 – vsoftco

+0

@vsoftco這是一個任務,我被迫使用C風格的數組和指針:( – Pantsuu

回答

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

而在主,try塊內,使用這樣的:

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

這工作!感謝您的幫助:D – Pantsuu