C ++:父对象和子对象的数组

时间:2012-08-15 01:48:56

标签: c++ arrays inheritance

我正在设计一款游戏,其中一些玩家牌是已知的而有些则不是。为此,我创建了一个带有子节点“OpenPlayer”和“ClosedPlayer”的父对象“Player”。

我想制作一个游戏中所有玩家的阵列,以方便游戏管理。但是,我还希望能够适当地访问OpenPlayer和ClosedPlayer中的特殊方法。这可能吗?

编辑:我实际上正在考虑使用STL中的矢量,因为这可能更合适,因为玩家数量可变。

2 个答案:

答案 0 :(得分:3)

通常,您不能创建其元素具有不同类类型的C ++数组;每个数组元素必须具有相同的大小,并且不一定适用于不同的子类。在数组中放入不同的类型会导致切片,这是子类数据成员的惊人消失。

但是如果你为不同的子类创建一个指针数组,那么你就可以轻松地做你想做的事了。如果玩家数量可能不同,您可能还会考虑使用vector而不是数组。

答案 1 :(得分:0)

通过“访问特殊方法”我假设您只是指OpenPlayer或ClosedPlayer中的方法?

通过数组,我假设你的意思是一些STL集合; - )

简短的回答是“不”。

长答案是“是的,你可以,但你需要将对象强制转换为正确的类型。这意味着你的设计是错误的。”

另一种不同的设计可能是使“开放”或“封闭”成为Player类的属性而不是单个子类。