读书人

问一个c++文件读写 类对象的有关问题

发布时间: 2012-03-31 13:13:26 作者: rapoo

问一个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; } 

读书人网 >C++

热点推荐