MFC如何生成乙個可序列化的類

2021-09-06 13:19:49 字數 1564 閱讀 6437

一、mfc允許物件在程式執行的整個過程中持久化的序列化機制

(1)序列化是指向持久化儲存媒介(如乙個磁碟檔案)讀或寫物件的過程。

(2)序列化用於在程式執行過程時或之後修復結構化資料(如c++類或結構)的狀態。

(3)mfc支援cobject類中的序列化,所以,所有繼承於cobject的類可以利用cobject的序列化協議。

(4)序列化的基本思想:

a、物件必須能將其當前狀態寫入到持久化儲存媒介中,通常用其成員變數實現。

b、物件可以通過讀或反序列化從儲存媒介中重新構造物件的狀態。

c、序列化處理所有物件指標的細節,以及序列化物件時對物件的迴圈引用。

d、關鍵點是物件自己負責讀和寫其本身的狀態,所以,序列化乙個物件時,必須是想基本的序列化操作。

(5)mfc使用carchive類的物件作為被序列化的物件和儲存媒介之間的中間媒介。

二、生成乙個可序列化的類的步驟

(1) derive your class from cobject. (定義乙個基類為cobject的類)

(2) override the serialize member function.(重寫序列化函式)

(3) use the declare_serial macro in the class declaration.(在類宣告檔案中使用declare_serial巨集)

(4) define a constructor with no arguments (a default constructor).(定義乙個無引數的建構函式)

(5) use the implement_serial macro in the class implementation file.(在實現檔案中使用implement_serial巨集)

三、例項

graph.h檔案:

[cpp]view plain

copy

class

graph : 

public

cobject  

;  

[cpp]view plain

copy

#pragma once

// graph 命令目標

class

graph : 

public

cobject  

//(1)定義乙個基類為coject的類

;  

graph.cpp檔案:

[cpp]view plain

copy

print?

implement_serial(graph, cobject, 1) 

graph::graph() 

graph::graph(

intdrawtype, cpoint ptold)  

graph::~graph()  

void

graph::serialize(carchive &ar) 

else

}  原部落格:

Serializable標識可序列化的類

新增 serializable 標識的類為可序列化的類,下面我們來看看序列化是什麼意思。序列化是指將物件例項的狀態儲存到儲存 的過程。在此過程中,先將物件的公共欄位和私有字段以及類的名稱 包括類所在的程式集 轉換為位元組流,然後再把位元組流寫入資料流。在隨後對物件進行反序列化時,將建立出與原物件完全...

Serializable標識可序列化的類

新增 serializable 標識的類為可序列化的類,下面我們來看看序列化是什麼意思。序列化是指將物件例項的狀態儲存到儲存 的過程。在此過程中,先將物件的公共欄位和私有字段以及類的名稱 包括類所在的程式集 轉換為位元組流,然後再把位元組流寫入資料流。在隨後對物件進行反序列化時,將建立出與原物件完全...

乙個序列化與反序列化object的方法

xml序列化物件 object that would be converted into xml public static string objecttoxml object instance catch exception ex finally if writer null return for...