我正在用C ++写一个纸牌游戏。我有一个游戏课程,可以跟踪玩家。我还有一个抽象基类 player , person 和 computer 这些类派生自。
我想让玩家保持阵列状态。在编译时,玩家的数量是未知的。因为有些玩家是人和其他计算机,我需要一个玩家指针,存储在一个阵列中,这是动态分配的,因为玩家的数量是未知的,对吗?
由于我对C ++比较陌生,我无法弄清楚语法是如何看待这种事情的。
答案 0 :(得分:2)
对于动态数组,标准库提供std::vector
。
由于您需要存储指向抽象基类型的指针,而不是对象本身,因此您需要确保正确管理对象的生命周期。最简单的方法是存储智能指针(在本例中为{3}},用于简单的单一所有权),这样当对象从向量中移除时会自动销毁。
所以你的数组看起来像
// Declaration
std::vector<std::unique_ptr<player>> players;
// Adding players
players.push_back(std::unique_ptr<person>(new person("Human"))); // C++11
players.push_back(std::make_unique<computer>("CPU")); // C++14 (hopefully)
// Accessing players
for (auto & player : players) {
player->play();
}
答案 1 :(得分:1)
你需要
std::vector<std::shared_ptr<Player>> players;
如果你想使用标准库(你应该使用)
,否则
Player** players;
答案 2 :(得分:0)
您可以使用以下
声明指针变量Player *playerptr;
这意味着playerptr是一个指向Player类型的指针。它可以包含一个Player的地址以及一个Players数组。在C ++和C数组中实现为指向数组第一个元素的指针。
根据您的要求,您可以动态分配数组。
playerptr=new Player[20];
这里20是数组的大小。
playerptr=new Player[20]();
第二种语法将数组中的所有元素初始化为默认值。