问一个c++文件读写 类对象的问题
//问一个c++文件读写 类对象的问题,这个成功了,可以读写,但是所要读写的类对象是有派生或者继承关系时,就不行了。请问一下c++ 文件流不能读写有派生或者继承关系的对象吗?
//成功的代码:///////////////////////////
#include <iostream>
#include <string>
#include <fstream>
using namespace std;
class A
{
private:
stringname;
string pass;
public:
void print()
{
cout<<"name = "<<name<<endl;
cout<<"password = "<<pass<< endl;
}
A()
{
}
A(string n,string p)
{
name=n;
pass=p;
}
};
int main()
{
A a1("TT","dd");
A a2("xx","ff");
ofstream Myfile;
Myfile.open("A.txt",ios::binary);
Myfile.write((char *)&a1,sizeof(A));
Myfile.write((char *)&a2,sizeof(A));
a1.print();
a2.print();
Myfile.close();
A b1;
A b2;
ifstream Myfile2;
Myfile2.open("A.txt",ios::binary);
Myfile2.read((char *)&b1,sizeof(A));
Myfile2.read((char *)&b2,sizeof(A));
b1.print();
b2.print();
return 0;
}
///下面是有继承关系类对象的文件操作,写成功,读失败,请大家帮忙解释一下?
#include <iostream>
#include <fstream>
#include <string>
using namespace std;
class Father
{
protected:
int a;
char b;
string c;
public:
Father()
{
a=5;
b='t';
c="啊星";
}
Father(int A,char B,string C)
{
a=A;
b=B;
c=C;
}
void print_data()
{
cout<<"a ="<<a<<endl;
cout<<"b ="<<b<<endl;
cout<<"c ="<<c<<endl;
}
Father(Father &MyFahter)
{
a=MyFahter.a;
b=MyFahter.b;
c=MyFahter.c;
}
};
class son :public Father
{
private:
string d;
public:
son():Father()
{
d="陈奇";
}
son(int a,char b,string c,string D):Father(a,b,c)
{
d=D;
}
son(son &Myson):Father(Myson.a,Myson.b,Myson.c)
{
d=Myson.d;
}
void print_string()
{
cout<<d<<endl;
}
};
int main()
{
Father Mike(99,'z',"download");
ofstream Myfile;
Myfile.open("c:\\A.txt",ios::binary);
Myfile.write((char *)&Mike,sizeof(Father));
//son Mikeson(99,'z',"download","baidu");
//Myfile.write((char *)&Mikeson,sizeof(son));
Myfile.close();
cout<<"原始数据://///////////////"<<endl;
Mike.print_data();
//cout<<"派生类:"<<endl;
//Mikeson.print_data();
//Mikeson.print_string();
//
Father Jim;
//son LittleJim;
//Father *p = new Father;
cout<<"未读文件时的结果:////////////////////"<<endl;
Jim.print_data();
//cout<<"派生类:"<<endl;
//LittleJim.print_data();
//LittleJim.print_string();
ifstream Myfile2;
Myfile2.open("A.txt",ios::in|ios::binary);
Myfile2.read((char *)&Jim,sizeof(Father));
//Myfile2.read((char *)&LittleJim,sizeof(son));
Myfile2.close();
cout<<"文件读写测试结果1://////////////////////////"<<endl;
Jim.print_data();
//cout<<"派生类:"<<endl;
//LittleJim.print_data();
//LittleJim.print_string();
//cout<<"指针测试:////////////////////////////////////////////"<<endl;
/*cout<<"拷贝测试:结果????????????????"<<endl;
son tom(Mikeson);
tom.print_data();
cout<<"派生类"<<endl;
tom.print_string();*/
return 0;
}
[解决办法]
- C/C++ code
///下面是有继承关系类对象的文件操作,写成功,读失败,请大家帮忙解释一下? #include <iostream> #include <fstream> #include <string> using namespace std; class Father { protected: int a; char b; string c; public: Father() { a=5; b='t'; c="啊星"; } Father(int A,char B,string C) { a=A; b=B; c=C; } void print_data() { cout <<"a =" <<a<<endl; cout <<"b =" <<b<<endl; cout <<"c =" <<c<<endl; } Father(Father &MyFahter) { a=MyFahter.a; b=MyFahter.b; c=MyFahter.c; } }; class son :public Father { private: string d; public: son():Father() { d="陈奇"; } son(int a,char b,string c,string D):Father(a,b,c) { d=D; } son(son &Myson):Father(Myson.a,Myson.b,Myson.c) { d=Myson.d; } void print_string() { cout <<d <<endl; } }; int main() { Father Mike(99,'z',"download"); ofstream Myfile; Myfile.open("c:\\A.txt",ios::binary); //.txt在c盘下 Myfile.write((char *)&Mike,sizeof(Father)); son Mikeson(99,'z',"download","baidu"); Myfile.write((char *)&Mikeson,sizeof(son)); Myfile.close(); cout <<"原始数据://///////////////" <<endl; Mike.print_data(); cout <<"派生类:" <<endl; Mikeson.print_data(); Mikeson.print_string(); Father Jim; son LittleJim; Father *p = new Father; cout <<"未读文件时的结果:////////////////////" <<endl; Jim.print_data(); cout <<"派生类:" <<endl; LittleJim.print_data(); LittleJim.print_string(); ifstream Myfile2; Myfile2.open("c:\\A.txt",ios::in ); //你的问题出现在这啊!A.txt在c盘下 Myfile2.read((char *)&Jim,sizeof(Father)); Myfile2.read((char *)&LittleJim,sizeof(son)); Myfile2.close(); cout <<"文件读写测试结果1://////////////////////////" <<endl; Jim.print_data(); cout <<"派生类:" <<endl; LittleJim.print_data(); LittleJim.print_string(); cout <<"指针测试:////////////////////////////////////////////" <<endl; cout <<"拷贝测试:结果????????????????" <<endl; son tom(Mikeson); tom.print_data(); cout <<"派生类" <<endl; tom.print_string(); system("pause"); return 0; }