程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> C++ >> C++入門知識 >> VC++ MFC如何生成一個可串行化的類,vcmfc

VC++ MFC如何生成一個可串行化的類,vcmfc

編輯:C++入門知識

VC++ MFC如何生成一個可串行化的類,vcmfc


一、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" 
 
 
// Graph 
 
IMPLEMENT_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; 
    } 
}

如此之後,即可實現串行化類

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved