gpt4 book ai didi

c++ - 在另一个类 C++ 的构造函数中实例化一个类的对象?

转载 作者:行者123 更新时间:2023-11-28 07:38:06 26 4
gpt4 key购买 nike

我正在用 C++ 编写一个基本游戏,它包含 3 个类:Game 类、Character 类和 Item 类。

Game 类将包含游戏的所有逻辑,因此 main 函数将简单地创建 Game 对象,调用它的逻辑功能和游戏将完成其他一切。可以有超过 1 个玩家。

Character 类有一个指针 vector ,可以容纳一个或多个项目。一个角色可以拥有一个或多个元素

Item 类具有项目的所有属性和功能。

我专注于设计游戏的结构。有人建议我以这样一种方式构建我的游戏,即在创建 Game 对象 时,它还会创建一个 Character 对象,然后该 Character 对象将创建一个指针 vector 保存 Item 和 Item 对象。所以它喜欢当我调用Game类的构造函数时,它会调用Character类的构造函数,Character类的构造函数会自动调用 >Item 类的构造函数

这是有道理的,但我不知道如何正确实现它。

这就是我得到的这是我目前所拥有的:

游戏.cpp

Game::Game()
{
vector<Character*> characterVector; //to hold Characters
}

Game::startLogic()
{
string name;
Character character = new Character(name);
}

角色.cpp

Character::Character(string name)
{
m_name = name;
vector<Item*> itemVector;
}

项目.cpp

Item::Item()
{ //initialise all the attributes of an item
}

主要.cpp

void main()
{
Game g;
g.startLogic();
}

所以我可以在游戏运行时创建一个角色(尽管稍后我仍然必须将该角色推送到 characterVector 中),但我不太确定如何为该角色创建项目。我的意思是我应该把那个实例化代码放在哪里?在startLogic函数中,在Game的构造函数中,还是在Character的构造函数中?

最佳答案

你的载体在错误的地方。您需要将它们作为类成员移动到类声明中,而不是作为构造函数中的局部变量。构造函数可以填充 vector (但实际上,角色是否知道他们“出生”时带有什么元素,游戏是否知道游戏一开始哪些角色还活着?),但不应该< strong>声明它们。

试试这个:

游戏.h

#include <vector>

class Character;

class Game
{
public:
std::vector<Character*> characters;

Game();
~Game();
void startLogic();
};

游戏.cpp

#include "Game.h"
#include "Character.h"
#include <memory>

Game::Game()
{
}

Game::~Game()
{
for (std::vector<Character*>::iterator i = characters.begin();
i != characters.end();
++i)
{
delete *i;
}
}

Game::startLogic()
{
...

// using auto_ptr as a safety catch in case of memory errors...

std::auto_ptr<Character> c(new Character("Joe Smoe"));

std::auto_ptr<Item> i(new Item);
c->items.push_back(i.get());
i.release();

characters.push_back(c.get());
c.release();

...
}

字符.h

#include <string>
#include <vector>

class Item;

class Character
{
public:
std::string name;
std::vector<Item*> items;

Character(std::string aName);
~Character();
};

角色.cpp

#include "Character.h"
#include "Item.h"

Character::Character(std::string aName)
: name(aName)
{
}

Character::~Character()
{
for (std::vector<Item*>::iterator i = items.begin();
i != items.end();
++i)
{
delete *i;
}
}

项目.h

class Item
{
public:
Item();
};

项目.cpp

#include "Item.h"

Item::Item()
{ //initialise all the attributes of an item
}

主要.cpp

int main()
{
Game g;
g.startLogic();
return 0;
}

关于c++ - 在另一个类 C++ 的构造函数中实例化一个类的对象?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16351573/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com