• VC++ MFC如何生成一个可串行化的类


    一、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; 
        } 
    }

    如此之后,即可实现串行化类

  • 相关阅读:
    distributelist详细用法
    内电层与内电层分割基于AltiumDesigner
    PADS原理图中绘制网络标号NET LABEL
    [置顶] Bookmark
    视频设备接口
    Net Cable
    ARM入门建议
    基于Altium Designer的4层PCB板的绘制
    PADS中遇到的问题EMSYM昂信科技
    Altium Designer和PADS的功能大对比
  • 原文地址:https://www.cnblogs.com/lujin49/p/4669846.html
Copyright © 2020-2023  润新知