在文件中存储 class 个实例

Storing class instances in a file

我正在尝试使用 C++ 制作一个角色扮演游戏,目前只是一个文本角色扮演游戏。我想创建很多 class "monster" 的实例。假设我需要制作 100 个怪物(哥布林、食人魔、龙等),我应该如何存储这些怪物?我是否应该有一个单独的文件专门用于存储 class 个实例,如果是,如何存储?我想将它们全部放在一个文件中,这样它就不会在其他地方占用 space。

你可以在文件中存储对象的实例,这叫做序列化,有很多方法可以实现,我建议在这个方向多研究一下。

我相信您不必为您的程序执行此操作,因为可能 space 足以存储您所有的怪物,然后再存储一些。

您可以将 class 存储在 binary 文件中并使用 writeread

也许这就是你想要做的,这是一个简单的例子。
假设我们有这个 class:

class Goblin {
public:
    int health;
    int damage;
};

还有一个文件要写入到:

fstream file("record.bin", ios::trunc | ios::binary | ios::in | ios::out);

现在我们可以创建一个 Goblin 对象:

Goblin my_goblin;
my_goblin.health = 100;
my_goblin.damage = 50;

然后我们就可以将数据写入二进制文件了:

file.write(reinterpret_cast<char*>(&my_goblin.health), sizeof(my_goblin.health));
file.write(reinterpret_cast<char*>(&my_goblin.damage), sizeof(my_goblin.damage));

在 运行 之后,二进制文件将包含关于您的 Goblin class.

的数据

现在,为了读取数据,您不需要 ios::trunc 标志:

fstream file("record.bin", ios::binary | ios::in | ios::out);

我们再次创建一个Goblin对象:

Goblin goblin;

然后我们可以将数据读入我们的 class:

if (!file.read(reinterpret_cast<char*>(&goblin.health), sizeof(goblin.health))) {
    // handle error
}
if (!file.read(reinterpret_cast<char*>(&goblin.damage), sizeof(goblin.damage))) {
    // handle error
}

现在打印以查看它是否正常工作:

// Output result if all went well
cout << "Goblin health = " << goblin.health << '\n';
cout << "Goblin damage = " << goblin.damage << '\n';

输出:

Goblin health = 100
Goblin damage = 50

这个真的没必要!

对于制作基于文本的游戏,您不需要上述方法。只需编写您的 classes 并将它们保存在头文件中。将声明与实现分开。

例如:Goblin.hGoblin.cppDragon.hDragon.cpp