MFC如何產生一個可序列化的類

來源:互聯網
上載者:User

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

#pragma once// Graph 命令目標class Graph : public CObject  //(1)定義一個基類為COject的類{DECLARE_SERIAL(Graph)  //(3)在類聲明檔案中使用DECLARE_SERIAL宏public:Graph(); //(4)定義一個無參數的建構函式Graph(int drawType, CPoint ptOld);virtual ~Graph();void Serialize(CArchive &ar); //(2)重寫序列化函數private:int m_drawType;CPoint m_ptOld;};

Graph.cpp檔案:

// Graph.cpp : 實現檔案//#include "stdafx.h"#include "Archive.h"#include "Graph.h"// GraphIMPLEMENT_SERIAL(Graph, CObject, 1) //(5)在實現檔案中使用IMPLEMENT_SERIAL宏Graph::Graph() //(4)定義一個無參數的建構函式{}Graph::Graph(int drawType, CPoint ptOld){this->m_drawType = drawType;this->m_ptOld = ptOld;}Graph::~Graph(){}// Graph 成員函數void Graph::Serialize(CArchive &ar) //(2)重寫序列化函數{if (ar.IsStoring()){ar<<m_drawType<<m_ptOld;}else{ar>>m_drawType>>m_ptOld;}}

 

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.