`
xiaodongdong
  • 浏览: 80526 次
  • 性别: Icon_minigender_1
  • 来自: 长沙
社区版块
存档分类
最新评论

 C++将对象写入二进制文件  

阅读更多

 最近在学习C++的文件操作,看到了有关将对象写入文件的操作,于是乎也想做这样的事情,可是网上找不到一很好的实例,在此将我自己写的实例贴出来,以供后来人参考   

#include<iostream>

#include<fstream>

#include<iomanip>

#include<cstdlib>

#include<string>

 

using namespace std;

 

class student{

public:

       string name;

       int age;

public:

       void setName(string & name){

              this->name=name;

       }

       void setAge(int & age){

              this->age=age;

       }

       string & getName(){

              return this->name;

       }

       int & getAge(){

              return this->age;

       }

 

};

 

 

void main(void)

{

       student st;

       cout<<fixed<<right;

       string a="小猪";

       st.setName(a);

       int b=21;

       st.setAge(b);

       const char * file="filetest.dat";

       ofstream fout(file,ios_base::out|ios_base::app|ios_base::binary);//以二进制模式打开以写入只追加打开文件

       if(!fout.is_open())

       {

              cerr<<"无法打开"<<file<<endl;

              exit(EXIT_FAILURE);

       }

       fout.write((char*)&st,sizeof st);

       fout.flush();

       fout.close();

 

       ifstream fin;

       fin.open(file,ios_base::in|ios_base::binary);

       if(fin.is_open())

       {

              student st2;

              while(fin.read((char*)&st2,sizeof st2))//以一个对象的长度进行读取

              {

                     cout<<"读出的年龄是:"<<st2.age<<endl;

                     cout<<"读出的名字是:"<<st2.name<<endl;

       }

       fin.close();

       }

}
 

运行结果:

图片

但是该程序还有一个问题,因为名字是string类型,string对象本身实际上并没有包含字符串,而是包含了一个指向其中存储了字符串的内存单元的指针,因为存入的将不是字符串的数据面是字符串存储的地址,当再次运行时该地址将毫无意义

图片

发现对象的名字已经无法再取出来了,对于该问题目前正在解决中,期待我的下篇日志,嘿嘿

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics