我正在设计一款游戏,其中一些玩家牌是已知的而有些则不是。为此,我创建了一个带有子节点“OpenPlayer”和“ClosedPlayer”的父对象“Player”。
我想制作一个游戏中所有玩家的阵列,以方便游戏管理。但是,我还希望能够适当地访问OpenPlayer和ClosedPlayer中的特殊方法。这可能吗?
编辑:我实际上正在考虑使用STL中的矢量,因为这可能更合适,因为玩家数量可变。
答案 0 :(得分:3)
通常,您不能创建其元素具有不同类类型的C ++数组;每个数组元素必须具有相同的大小,并且不一定适用于不同的子类。在数组中放入不同的类型会导致切片,这是子类数据成员的惊人消失。
但是如果你为不同的子类创建一个指针数组,那么你就可以轻松地做你想做的事了。如果玩家数量可能不同,您可能还会考虑使用vector
而不是数组。
答案 1 :(得分:0)
通过“访问特殊方法”我假设您只是指OpenPlayer或ClosedPlayer中的方法?
通过数组,我假设你的意思是一些STL集合; - )
简短的回答是“不”。
长答案是“是的,你可以,但你需要将对象强制转换为正确的类型。这意味着你的设计是错误的。”
另一种不同的设计可能是使“开放”或“封闭”成为Player类的属性而不是单个子类。