2011-03-12 119 views
1

我有幾個類DemandBuilding,Factory,Farm和其他一些。我想將這些實例存儲在單個二維數組中,我通過創建一個基類Building來做到這一點,該類除了允許我這樣做外,什麼都不做:(注意第二個向量是因爲它是一個用於存儲這些參數的二維向量在地圖上的建築物)包含派生類型的C++向量基類

vector<vector<Building*> > map; 

取而代之的是:

vector<vector<DemandBuilding*> > demand_buildings; 
vector<vector<Factory*> > factories; 
vector<vector<Farm*> > farms; 
//etc... 

(我是從我的電腦遠,所以我不知道這是合法的C++,但我認爲這是) 對我來說,這看起來像是不正確地使用了繼承,是嗎?

編輯:謝謝你幫助,這沒有什麼概念錯誤,但我已經意識到這樣做不會幫助我的情況,無論如何。

回答

1

從概念上講,沒有什麼錯 - 這一切都取決於你如何使用它。如果您發現自己不得不鑄造很多,您可能需要重新考慮設計。

而且,你很可能應該有一個虛析構函數,如果你刪除一個Building *和析構函數不是虛擬的,子類的析構函數不執行

0

不需要第二個載體,只需使用:

vector<Building*> buildings; 

而對於二維數組,你可以有:

vector< vector<Building*> > buildingMatrix; 

,或者如果你知道在編譯時的二維數組的大小:

Building* buildingMatrix[SOME_CONST_SIZE_1][SOME_CONST_SIZE_2]; 

所以你可以在這裏有所有建築物的指針。

此外,您可能會考慮將您偏僻建築物的所有常見方法放入基類建築物中。使其虛擬爲適當的,使用虛擬析構函數,以防需要使用Building指針正確刪除特定的建築物。

+0

對不起,我忘了提及這是一個用於在地圖上存儲建築物的二維數組。我會編輯 – Ell 2011-03-12 14:50:29

+0

@Ell如果它是2D,那麼你很好有矢量> – 2011-03-12 14:55:00