2012-11-20 128 views
3

如何創建一個動態的多態對象數組,如果我有一個具有派生類的抽象類,並且不使用STL數據結構類? (向量,列表等)如何多態地創建一個動態的對象數組?

對象

TwoDimensionShape *shapes[2];  
shapes[0] = &Triangle("right", 8.0, 12.0); 
shapes[1] = &Rectangle(10); 

我知道我不能這樣做,因爲你不能創建抽象類的對象的靜態數組:

cin >> x; 
TwoDimensionShape *s = new TwoDimensionShape [x]; 

編輯:

感謝尼克,這個作品:

int x = 5; 
    TwoDimensionShape **shapes = new (TwoDimensionShape*[x]); 

回答

4

您可以創建一個指針數組的那類:

TwoDimensionShape **s = new TwoDimensionShape*[x]; 

,然後構造每個對象與它的特定類型:

s[0] = new Triangle("right", 8.0, 12.0); 
s[1] = new Rectangle(10); 

類似你有什麼。 記得在你不需要的時候刪除。

+0

我有一個問題,int x = 5; TwoDimensionShape ** shapes = new(TwoDimensionShape *)[x];編譯器顯示:「TwoDimensionShape *類型的值不能用於初始化TwoDimensionShape類型的實體** – Dog

+0

您在形狀上缺少星號並且OneDimensionShape缺少一個:'TwoDimensionShape ** shapes = new(TwoDimensionShape *)[x]; ' – imreal

+0

嗯,這很奇怪,當我點擊進行編輯並且它在那裏,但仍然給出了一個錯誤 – Dog