我正在设计一款游戏,其中一些玩家牌是已知的,而另一些则不是。为此,我创建了一个带有子“OpenPlayer”和“ClosedPlayer”的父对象“Player”。
我想将这个游戏中的所有玩家组成一个数组,以方便游戏管理。但是,我也希望能够适当地访问 OpenPlayer 和 ClosedPlayer 中的特殊方法。这可能吗?
编辑:我实际上正在考虑使用来自 STL 的向量,因为由于玩家数量可变,这可能更合适。
我正在设计一款游戏,其中一些玩家牌是已知的,而另一些则不是。为此,我创建了一个带有子“OpenPlayer”和“ClosedPlayer”的父对象“Player”。
我想将这个游戏中的所有玩家组成一个数组,以方便游戏管理。但是,我也希望能够适当地访问 OpenPlayer 和 ClosedPlayer 中的特殊方法。这可能吗?
编辑:我实际上正在考虑使用来自 STL 的向量,因为由于玩家数量可变,这可能更合适。
一般来说,你不能创建一个元素属于不同类类型的 C++ 数组。每个数组元素的大小必须相同,不同的子类不一定如此。将不同的类型放入数组中会导致切片,这是子类的数据成员令人惊讶的消失。
但是,如果您创建一个指向不同子类的指针数组,那么您将很容易能够做您想做的事情。如果玩家数量可以变化,您也可以考虑使用 avector
而不是数组。
通过“访问特殊方法”,我假设您指的是 OpenPlayer 或 ClosedPlayer 中的方法?
通过数组,我假设您的意思是一些 STL 集合;-)
最简洁的答案是不”。
长答案是“是的,你可以,但你需要将对象转换为正确的类型。这意味着你的设计是错误的。”
不同的设计可能是让“打开”或“关闭”成为 Player 类的属性,而不是单个子类。