也许我偏离了方向,但我正在尝试自学 C++ 对象和类的概念,并构建非常小的游戏。 在那场比赛中,我将拥有一个拥有棋盘的大对象(类) 我希望这个对象创建 NUMBER 或 PlayerClass 对象,每个对象都将成为该棋盘对象中的一个对象,我不知道会有多少(玩家) 我想知道我可以拥有对象数组吗? 我写了这段代码来展示我在寻找什么:
class PlayerClass{
public:
...
private:
int myLocation[2];
bool isPlayer=false;
};
class game{
public:
void MakePlayers(int numberOfPlayers){
PlayerClass players[numberOfPlayers];
playerObject=players;
Number=numberOfPlayers;
}
private:
PlayerClass *playerObject
int Number;
}
最佳答案
我赞扬您尝试自学 C++ 的主动性。它不是最容易学习的语言,但一旦您理解了它,它就会非常强大。
第一条评论:你想要不止一个PlayerClass
目的。实现这一目标的一种方法是拥有一个 PlayerClass*
指向动态分配的玩家数组的成员变量,这似乎是你想要的。但这需要大量手动内存管理,即使您对这门语言有经验也很难做到正确。我建议使用 std::vector
相反(确保 #include <vector>
):
class game
{
// ...
private:
std::vector<PlayerClass> m_players; // instead of PlayerClass*
// no more need for int Number
};
然后你的构造函数可以像这样初始化它:
void MakePlayers(int numberOfPlayers)
: m_players(numberOfPlayers)
{
}
// if you're being rigorous, you'll want to either change numberOfPlayers to
// an unsigned type or ensure it is nonnegative before using it
vector
支持[]
与常规数组具有相同语义的运算符,因此您仍然可以访问单个玩家(例如)m_players[3]
.此外,vector
知道它包含多少个元素(size()
成员函数),因此不再需要单独跟踪玩家数量。
祝你好运!
更新:您的一条评论说您是从 C 转到 C++,所以也许手动内存管理对您来说并不那么陌生 ;)。尽管如此,正如 Stephane Rolland 指出的那样,由于标准库中的有用类,在现代 C++ 中它几乎从来都不是必需的。如果您发现自己出于习惯而想要这样做,请务必先考虑是否真的有必要。
关于c++ - 类中的对象、数字/数组或对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25331510/