Това не е точно тема за начинаещи в C++
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