今天學習下類的序列化,舉個例子記錄下。
一、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 位址資訊,但是可...