类、数字/数组或对象中的对象

objects in a class, number/array or objects

本文关键字:对象 数组 数字      更新时间:2023-10-16

也许我离得太远了,但我正在尝试自学c++对象和类的想法,并构建非常小的游戏。在该游戏中,我将拥有一个拥有棋盘的大对象(类)我想让这个对象创建NUMBER或PlayerClass对象每个对象都是这个board对象中的一个对象,我不知道有多少(players)我想知道我可以有数组的对象?我已经写了这段代码来显示我正在寻找的内容:

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++中几乎没有必要使用它。如果你发现自己只是出于习惯而这么做,一定要先考虑一下是否真的有必要。

您应该使用std::vector:

class game {
    std::vector<PlayerClass> players_;
  public:
    game (std::size_t NumPlayers) : players_ (NumPlayers) {}
}

是的,你可以,但你有错误的函数MakePlayers,它应该是

void MakePlayers(int numberOfPlayers){
        playerObject= new (PlayerClass*)[numberOfPlayers];
        Number = numberOfPlayers;
        for (int i = 0; i++; i < numberOfPlayers)
        {
            playerObject[i] = new PlayerClass();
        }
    }

另外,您需要在类析构函数中释放playerObject,以避免内存泄漏。另一个建议,请先理解什么是指针