我有几个课程DemandBuilding
,Factory
,Farm
和其他一些课程。我希望将这些实例存储在一个单独的2d数组中,我通过创建一个基类Building来做到这一点,它除了允许我这样做之外什么都不做:(注意第二个向量是因为它是用于存储这些的2d向量地图上的建筑物)
vector<vector<Building*> > map;
而不是:
vector<vector<DemandBuilding*> > demand_buildings;
vector<vector<Factory*> > factories;
vector<vector<Farm*> > farms;
//etc...
(我离开了电脑,所以我不确定这是合法的C ++,虽然我认为是这样) 对我而言,这似乎是对继承的错误使用,是吗?
编辑:感谢您帮助我在概念上没有任何错误,但我已经意识到这样做不会对我的情况有所帮助,无论如何,谢谢。
答案 0 :(得分:1)
从概念上讲,这没有任何问题 - 这一切都取决于你如何使用它。如果你发现自己不得不施放,你可能需要重新考虑设计。
此外,您很可能应该有一个虚拟析构函数,如果删除Building *
并且析构函数不是虚拟的,则子类析构函数不会被执行。
答案 1 :(得分:0)
不需要第二个向量,只需使用:
vector<Building*> buildings;
对于2D阵列,您可以:
vector< vector<Building*> > buildingMatrix;
或者如果您在编译时知道2d数组的大小:
Building* buildingMatrix[SOME_CONST_SIZE_1][SOME_CONST_SIZE_2];
所以你可以在这里找到所有建筑物的指针。
另外,您可以考虑将您的不同建筑物的所有常用方法放入基础建筑物中。根据需要使它们虚拟化,使用虚拟析构函数,以防您需要使用构建指针正确删除特定的构建。