c++ - 类中的对象、数字/数组或对象

标签 c++ class

也许我偏离了方向,但我正在尝试自学 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/

相关文章:

java - 私有(private)变量方法和类的问题

c++ - 在 C++ 中创建新类型时出错

c++ - 从不同的架构加载 dylib

c++ - 在内部 while 循环中使用 EOF 时结束的 while 循环

c++ - 有没有办法恢复/恢复 nohup 以在控制台中查看输出?

c++ - 如何通过在 C++ 中创建对象来将参数传递给类?

Java如何处理一个类型的对象

python - 在 C++ 中嵌入 python : strange segmentation faults

C++ 覆盖函数

C++:在另一个方法中调用依赖于对象的方法