DOS 或SDK下的类Serialize保存或恢复数据

MFC中想要把文件存盘,使用Serialize是很方便的事情,但是在SDKConsole下想保存就得自己处理,但没必要把整个MFC拿过来。但可以使用MFCSerialize的思想。为了使文件的保存像Serialize中的一样,必须以OOP为前提。Serialize本身是对CObject所封装的数据提供一个保存和读取的方法。

在每一个对象中应声明保存和读取函数,这里并没有使用合二为一的Serialize,而是把Save()和Load()各自声明。要想结合成Serialize,必须对<<>>运算符进行重载。

 

  

这里可以把A看做B公司的职员,a看做职员的薪水。当需要保存数据的时候,只需要调用Bsavedata函数。因为和我们直接打交道的是B的,而A是隶属于B的,我们没必要和它打交道,因此A::savedata()当然由B::savedata()负责调用了。

   成员函数如下:

         

       当调用B::savedata()时,B::savadata()方法将表的大小存进去,然后用一个for循环一次调用b[0] ,b[1]…A::savadata()方法。而此方法是将保存A的存有数据成员的值。

这种思想的实质就是:把自己对象的数据保存完,然后就把保存的任务叫给下级,每级只要完成自己的部分就行了。于是,只要对象之间的关系确定了,那么保存的方法
也就自然确定了,不需要人为的干预。而一旦需要对数据结构进行更改,只需要对变动
过的对象的savedata()loaddata()方法进行修改就可以了,不影响其他对象的数据保
存工作。这就是serialize的,也可以说是OOP带来的好处之一。

需要引起注意的一点是,这样的数据结构中,可能会有多态,不是每个职员的数据格式都一样,实际使用中一般要从A类派生出C类、D,然后用A*b[10]代替A b[10],

b->savedata()来调用。因此需要声明loaddatasavedata为虚函数

      实际过程中保存工作,只需在主程序这样做即可:

   

对于fout.close() fin.close()只需在foutfin的析构器中运行执行即可。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值