c++如何在文件里存储类对象?

请问如何在c++中用文件输入输出流存入和读取类对象数组?尤其是类对象中含有复杂成员的情况,直接用二进制方法提示有错误;或者指出下面一段代码如何修改,能够保存类对象

#include <iostream>
#include <fstream>
#include <string>
using namespace std;
class Test
{
private:
int num;
string name;
public:
Test(int n=0,string s="shit"):num(n),name(s){}
void set()
{
cin>>num;
cin>>name;
}
void display()
{
cout<<num<<" "<<name<<endl;
}
};
void main()
{
int i;
Test *t;
t=new Test[2];

for (i=0;i<2;i++)
{
t[i].set();
}
for (i=0;i<2;i++)
{
t[i].display();
}

ofstream outfile("test.txt",ios::binary);
outfile.write((char *)t,sizeof(t));
outfile.close();

ifstream infile("test.txt",ios::binary);
infile.read((char *)&t,sizeof(t));
infile.close();

cout<<"DONE!\n";

for (i=0;i<2;i++)
{
t[i].display();
}

}
outfile.write(t,sizeof(Test)*2);
infile.read(t,sizeof(Test)*2);
此方法也一样不可以 试过了,无论哪种方法 debug可以通过 运行的时候出错,应该是内存错误;
希望回答的高手能亲自运行一下程序 看看

ofstream outfile("test.txt",ios::binary);
outfile.write((char *)t,sizeof(t));
outfile.close();

ifstream infile("test.txt",ios::binary);
infile.read((char *)&t,sizeof(t));
//去掉上面一句中的 & 号即可.改为
//infile.read((char *)t,sizeof(t));
infile.close();

//BCC55编译通过且正确运行.
//另外,sizeof(t)一处也可以改为sizeof(Test)*2,结果一样
温馨提示:内容为网友见解,仅供参考
第1个回答  2010-08-06
fallx 说的对。
不过要注意:string name;
string 这个对象里面存的字符串其实应该是地址引用。 当你以二进制的形式保存在文件里以后,再读取 name的值有可能出现意料之外的结果。
建议用 char name[40];
第2个回答  2010-08-06
试试
outfile.write(t,sizeof(Test)*2);
infile.read(t,sizeof(Test)*2);

注意new后要加:
delete [] t;
养成好习惯.

请问C++如何保存一个类对象
sizeof(A)告诉你的是对象的大小,可以用A代替对象变量只是一种方便的书写方式.类比sizeof(int)就知道了,你不会因为sizeof(int)==4就说机器给int这个类型分了4个字节吧.纠正我前面的回答:虚函数表确实是在类的内存里,对象内存只存指向它的指针---我估计就是多出来的那4字节.希望能解决您的问题。

C++如何将对象保存到文件中?
ofstream outfile("test.txt",ios::binary); outfile.write((char *)t,sizeof(t)); outfile.close(); ifstream infile("test.txt",ios::binary); infile.read((char *)&t,sizeof(t)); \/\/去掉上面一句中的 & 号即可.改为 \/\/infile.read((char *)t,sizeof(t)); inf...

C++中类的对象在文件中的存取问题
后一种改法大致如下 include<iostream>#include<fstream>#include<string>using namespace std;class Key{private:string keyword;public:Key();string getkey();void setkey(string NewKey);};string Key::getkey(){return keyword;}Key::Key(){}void Key::setkey(string NewKey){keyword = New...

请问C++ 如何从txt文件中读取数据,然后保存在类的数组中?
while(!File_read.eof()){ File_read>>data[i].num>>data[i].name>>data[i].score;i++;} 数组data是的类型是信息类。自己试试。

C++如何从文件读取信息存到类里面
1、定义输入文件流D的对象,完成从文件的读取工作;2、利用该对象将文件内容读入到程序定义的某个变量中,然后再调用该类的公有成员函数,将数据送给类中的数据成员。

c++中 .h后缀的文件里怎么定义fstream类对象
头文件中不建议定义对象,如果一定要定义,可以定义成静态对象 比如 static fstream ste;如果不带static,那么该头文件最多只能被一个源文件直接\/间接引用 更常见的做法是在任意一个cpp文件中定义全局对象,然后在h文件里面加这个对象的声明

C++中,把一个map容器对象写到文件上并能读取,如何实现
1.将map遍历,取出其中的所有key-value对,按照一定格式写入文件,读取时,按照指定的格式反写回去即可,可以选择自定义读写类,或者重载>>、<<运算符来完成。2.使用boost的序列化库(不是很方便)注:由于含有动态信息,map、vector等容器都不可以直接序列化写入文件 共同进步 ...

从文件中读取存入vector的问题
在C++中没有非常方便的序列化方式,一般都需要你自己手工来控制对象的存储或构建过程。像你这个问题,你只能自己在这个类中写存储过程代码了,比如使用文本文件,第一行写入vector的大小,后面每行写入一个string。然后反序列化的时候先读取第一个数字,然后读取后面这么多个string,最后再构建vector,最终...

MinGW是如何存储对象、如何实现类继承、多态。
对象,继承,多态是面向对象编程语言中的一些概念,MinGW只是一个编译环境,它可以编译 C++ 程序,C++是一个面向对象的编程语言,所以比较正确的说法是 “C++是如何存储对象、如何实现类继承、多态“。在 C++ 中,实现类的继承,多态有一套规定好的语法,\/\/ 继承演示\/\/ 定义一个父类class Parent {...

C++ 如何在一个cpp文件中引用另外一个cpp文件中的类对象
extern ClassName objectName;

相似回答