类、数字/数组或对象中的对象
objects in a class, number/array or objects
也许我离得太远了,但我正在尝试自学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,以避免内存泄漏。另一个建议,请先理解什么是指针
- 将对象数组的引用传递给函数
- 如何使用Visual Studio 2017在C++中为参数化对象数组使用唯一指针
- 在c++中尝试对对象数组进行排序时,出现std:bad_alloc错误
- 类对象数组的问题会导致崩溃
- Arduino C++在构造函数中用参数声明对象数组
- 使用对象数组对 SFML 进行动画处理
- C++ 对象数组堆栈溢出
- 如何将对象数组作为参数传递给模板
- 使用向量初始化参数化构造函数的对象数组
- 如何初始化对象数组?
- C++创建对象数组
- 在对象数组中搜索字符串并返回相应值的函数
- 有没有办法使用该类的构造函数初始化另一个类的私有部分内的对象数组?
- 如何在运行时在对象数组中动态追加新对象C++并打印它们
- 为什么我在声明对象数组时不能使用 -> 运算符?
- 编译时生成应在构造函数中创建的非 constexpr 对象数组
- 使用 C++ 创建对象数组
- 对象数组打印空白字符串
- 重载运算符 [] 用于从对象数组中给出特定索引
- 如何在 C++ 中使用提升属性树从 JSON 文件中读取对象数组