我正在做一项需要在C ++中进行文件处理的作业。我坚持如何写,然后回读动态创建的对象。 i-e借助于指向派生类对象的基类指针。我们不知道在任何特定时间存储哪个对象。整个作业足够长,可以在这里发布,但我已经制作了一个类似的简单代码来阐述我的问题。
#include <string>
#include <conio.h>
#include <iostream>
#include <vector>
#include <fstream>
using namespace std;
class MAss
{
private:
public:
int age;
string name;
MAss();
virtual void print();
friend ofstream & operator << (ofstream & out, MAss & obj);
friend ifstream & operator >> (ifstream & in, MAss & obj);
};
void MAss :: print()
{
cout<<endl<<"age = " << age;
cout<<endl;
cout<<"name = " <<name;
}
MAss :: MAss()
:age(10)
, name("Random")
{}
ofstream & operator << (ofstream & out, MAss & obj)
{
out<<obj.age;
out<<" | " <<obj.name<<endl;
return out;
}
ifstream & operator >> (ifstream & in, MAss & obj)
{
string temp;
in>>obj.age;
in>>temp;
in>>obj.name;
return in;
}
class Bass : public MAss
{
public:
int reg;
Bass();
void print();
friend ofstream & operator << (ofstream & out, Bass & obj);
friend ifstream & operator >> (ifstream & in, Bass & obj);
};
Bass ::Bass()
: reg(1)
{}
void Bass :: print()
{
MAss ::print();
cout<<endl<<"REG = " <<reg;
}
ofstream& operator<<(ofstream& f, Bass& obj)
{
MAss & a = obj;
f<<obj.reg<<" | ";
f<<a;
return f;
}
ifstream& operator>>(ifstream& f, Bass& obj)
{
string temp;
MAss & a = obj;
f>>obj.reg;
f>> temp;
f>>a;
return f;
}
void main ()
{
vector <MAss*> b(6);
cout<<endl<<b.size();
ofstream o("E:\\A.txt");
for(int i=0; i<b.size();i++)
b[i] = new Bass;
b[0][0].age =1;
b[0][0].name = "Jack";
b[1][0].age =2;
b[1][0].name = "Jill";
b[2][0].age =3;
b[2][0].name = "Jane";
b[3][0].age =1;
b[3][0].name = "Tom";
b[4][0].age =2;
b[4][0].name = "Phill";
b[5][0].age =3;
b[5][0].name = "Bone";
for (int i=0; i<b.size(); i++)
{
o << b[i][0];
}
o.close();
ifstream in("E:\\A.txt");
vector <MAss*> arr;
while(!in.eof())
{
Bass a;
in >> a;
a.print();
}
arr.pop_back();
cout<<endl<<arr.size()<<endl;
for (int i=0; i<arr.size(); i++)
{
cout<<endl<<endl<<endl<<endl<<"INDEX : " << i<<endl;
arr[i][0].print();
}
getch();
in.close();
}
答案 0 :(得分:3)
如果要读/写任意对象,您要查找的术语是“对象序列化”。
C++ serialization的答案可以帮到你吗?此外,还有一个关于该主题的C++ FAQ entry小节。