Это не совсем тема для начинающих в С++
C++ не имеет автоматизированного способа хранения/загрузки ваших объектов в/из файла. В любом случае, вы решили пойти, вам придется реализовать его самостоятельно.
Вы можете перегрузить операторы <<
и >>
для использования с потоками или использовать свои собственные методы Load
и Store
(или любые другие имена, которые вы выбрали, например, Serialize
/ Deserialize
). Я лично предпочитаю создавать свои собственные функции и не использовать операторы, но это только я.
Вот простой пример (с перегруженными операторами <<
и >>
):
#include <fstream>
#include <iostream>
using namespace std;
class MyClass
{
public:
MyClass (int x) : m_x(x), m_y(x+1) {}
friend istream& operator >> (istream& in, MyClass& obj);
friend ostream& operator << (ostream& out, const MyClass& obj);
private:
int m_x;
int m_y;
};
istream& operator >> (istream& in, MyClass& obj)
{
in >> obj.m_x;
in >> obj.m_y;
return in;
}
ostream& operator << (ostream& out, const MyClass& obj)
{
out << obj.m_x << ' ';
out << obj.m_y << endl;
return out;
}
int main(int argc, char* argv[])
{
MyClass myObj(10);
MyClass other(1);
cout << myObj;
ofstream outFile ("serialized.txt");
outFile << myObj;
outFile.close();
ifstream inFile ("serialized.txt");
inFile >> other;
inFile.close();
cout << other;
return 0;
}
Стоит отметить, что вы должны позаботиться о формате сериализации. В приведенном выше примере это просто текст; но если вы собираетесь хранить много этих объектов, вы можете начать думать о сериализации двоичных данных (вам нужно будет использовать флаги ofstream::binary
и ifstream:binary
при открытии файлов, и вам не понадобятся дополнительные разделители, такие как ' '
и endl
в вашем файле). поток сериализации).
Обычно, когда вы думаете о сериализации, вы также хотите думать об управлении версиями вашего потока — и это отдельная тема.
person
Peter Al
schedule
06.07.2012