CArchive使用舉例

2021-06-25 11:23:16 字數 2022 閱讀 9573

今天學習下類的序列化,舉個例子記錄下。

一、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檔案

#ifndef _graph_h

#define _graph_h

#include "afx.h"

#include "afxwin.h"

class graph : public cobject (1)定義乙個基類為coject的類

;#endif

graph.cpp:

#include "graph.h"

implement_serial(graph, cobject, 1) //(5)在實現檔案中使用implement_serial巨集

graph::graph() //(4)定義乙個無引數的建構函式

graph::graph(int drawtype, int ptold)

graph::~graph()

// graph 成員函式

void graph::serialize(carchive &ar) //(2)重寫序列化函式

}

其次, 我們再寫乙個主程式呼叫這個例子。

maindebug.cpp:

#include "graph.h"

void main()

ar1.close();

file1.close();

// read a object

cfile file2("file.txt", cfile::moderead | cfile::modecreate | cfile::modenotruncate );

carchive ar2(&file2, carchive::load);

graph *gh2 = null;

trycatch(cexception *e)

ar2.close();

file2.close();

}

模板使用舉例

ifndef jjalloc define jjalloc include include include include include namespace jj template template inline void destroy t ptr template class allocato...

sed使用舉例

刪除 d命令 sed 2d example 刪除example檔案的第二行。sed 2,d example 刪除example檔案的第二行到末尾所有行。sed d example 刪除example檔案的最後一行。sed test d example 刪除example檔案所有包含test的行。替換...

namp使用舉例

怎樣在我的網路上找到活動主機 在此示例中,這兩台計算機都位於專用的 192.168.56.0 24 網路上。kali 機器的 ip 位址為 192.168.56.101,要掃瞄的 metasploitable 機器的 ip 位址為 192.168.56.102。假如我們不知道 ip 位址資訊,但是可...