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的析構器中運行執行即可。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章