Dynamic Objects and File handling
I'm doing an assignment which requires file handling in C++. I am stuck at how to write and then read back dynamically created objects. i-e by the help of a base class pointer which is pointing the derived class object. and we don't know which object is stored there at any particular time. The whole assignment is long enough to be posted here, but i have made a similar simple code to elaborate my question.
#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();
}
If you want to read/write arbitrary objects, the term you are looking for is "object serialization".
Do the answers to C++ serialization help you? Furthermore, there's also a C++ FAQ entry subsection on that topic.
精彩评论