1.首先我们考虑一个问题:在之前的几个demo中,有一个我们做了一个简单的学生管理系统。其实那个并不完善,我当时只是实现了大部分的功能,其中save()函数和load()函数都没有实现,因为当时我只是想简单的给一个思路,程序的实现其实并不是很重要,最重要的是程序的架构。有一个好的结构,程序才可以一直的稳健运行,对于以后的修改和维护升级也提供了很大的方便。但是在我们之前的程序中,学生的信息是需要保存起来的。等到程序下一次运行还可以读取,这才是一个完整的做法。那么今天我们就来讨论一下该如何实现这两个函数。
2.实现这一操作在C++中叫做对象的序列化和反序列化。就是把对象写入文件里面,等到下一次程序运行的时候再读取出来。在java语言中,为了封装这一操作java提供了专门序列化接口。而且在java中,文件的写入与读出java为之封装了专门的接口可以直接使用,很方便,但是对于c++我们需要自己实现。
3。c++中想要序列化一个对象首先还是要从文件操作入手。把对象的数据写入文件,等到下一次运行程序是时候再读取出来。首先我们知道写文件是很容易的,
#include<iostream>
#include<fstream>
class MyClass{
int a;
double b;
char c;
void set_a(int a1){//提供写入数据的接口
a=a1;
}
int get_a(){//提供访问数据的接口
return a.;
}
//其他方法也是类似
}
int main(){
ofstream out;
MyClsss m;
out.open(“文件的路径名”")//这里需要注意的是,输出文件流向文件中写入数据的时候就算是文件在当前是的路径下找不到
//系统会自动在这里创建一个文件。但是输入文件流就不同了,这里需要注意。
if(!out){
cout<<"文件打开失败!"<<endl
}
out<<m.get_a();//其他数据的写入类似
//文件的读出,假设这里已经写入了多组数据
ifstream in;
in.open("文件的路径");
MyClass m1;
while(!in.eof()){//到达文件的结尾
int a;
in>>a;
m1.set_a(a);//其他数据类似写入
}
//这种操作看似简单,但是会遇到很多问题但是这可以处理一些基本的问题,下一节我将给出序列化C++实现对象序列化的接口函数。来真正的解决这个问题。使得序列化的对象不仅仅是可以保存在文件中还可以用于网络传输
}