2014-01-10 24 views
-3

我有基類Product和派生類BookMagazineMusicCD。我想繼續指向這些對象在一個陣列中的主,集裝箱等如何將所有派生類對象保存在一個容器中?

int main() 
{ 
    Product* pro[100]; 
    pro[0] = new Book(); 
    pro[1] = new Magazine(); 
    pro[2] = new MusicCD(); 
} 

pro大小是100,但我不希望有一個靜態的大小。產品被賦予默認設置並且僅由用戶使用。如果我想添加更多的對象,我必須手動執行它pro[68], pro[69] ...?

+2

'vector '? – 2014-01-10 21:41:13

+0

'vector >'! – Casey

回答

0

標準庫有許多可以幫助您的可變大小的通用容器。請參閱http://www.cplusplus.com/reference/stl/

+2

cplusplus.com是一個可怕的參考,請使用別的東西(如en.cppreference.com)。 – 2014-01-10 21:43:20

+1

我恭敬地不同意。我試着看着你提到的網站,這讓我的眼睛受到傷害;佈局和字體選擇都很糟糕。此外,如果參考文獻中包含不正確的信息,那麼參考文獻真的很糟糕在我所有的時間使用cplusplus.com,我從來沒有發現它是不正確的。也許有時缺乏,但不是不正確的。 –

+2

@ H2CO3您的個人意見 – Paranaix

3

標準C++庫提供了可擴展的容器和處理指針的更安全的方法,我建議你同時使用這兩個指針。一個std::vector將調整大小,因爲你需要它和構造,因爲我下面將顯示當主要退出時清理本身和指針。

#include <memory> 
#include <vector> 

int main(){ 
    std::vector<std::shared_ptr<Product> > products; 
    //C++11 
    products.emplace_back(new Book()); 
    products.emplace_back(new Magazine()); 

    //C++03TR1 (VS 2010 and older GCC) 
    // we don't have emplace_back here so we need to 
    // construct both the shared_ptr and the book if the book 
    // constructor takes arguments 
    // otherwise we can use the slightly more exception safe std::make_shared 
    products.push_back(std::make_shared<Book>()); 
} 
+0

工作演示http: //coliru.stacked-crooked.com/a/494c97c6c2300b84 – Mgetz

+0

@ user3183539用不能正常工作的代碼更新您的文章 – Mgetz

0

您可以使用標準C++容器之一,如向量。

#include <vector> 

class Product{ 
}; 

class Book : public Product{ 
}; 

class Magazine : public Product{ 
}; 

class MusicCD : public Product{ 
}; 


int main(){ 

    std::vector<Product *> pro; 

    pro.push_back(new Book); 
    pro.push_back(new Magazine); 
    pro.push_back(new MusicCD); 


} 
+0

是的,雖然Mgetz的答案是高級的,因爲它處理內存所有權/管理。 – JBentley

+0

其給出的錯誤沒有重載函數的實例匹配參數列表 – user3183539

+0

@ user3183539您使用的編譯器是什麼? – Mgetz

相關問題