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

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

VC++ MFC如何生成一个可串行化的类的更多相关文章

  1. MFC如何生成一个可串行化的类

    一.MFC允许对象在程序运行的整个过程中持久化的串行化机制 (1)串行化是指向持久化存储媒介(如一个磁盘文件)读或写对象的过程. (2)串行化用于在程序运行过程时或之后修复结构化数据(如C++类或结构 ...

  2. MFC 文件I/O和串行化

    1.枚举所有文件夹(递归) void EnumerateFolders () { WIN32_FIND_DATA fd; HANDLE hFind = ::FindFirstFile (_T (&qu ...

  3. MFC用串行化实现文档存储和读取功能

    在面向对象的程序设计中,一般都是用二进制文件来保存文档资料.在VC++中控制和使用文件流的方法很多,MFC程序设计中常用的有两种方法:用CFile对象存储和读取文件:利用串行化存取文件.其中用CFil ...

  4. MFC文件IO和串行化

    一. MFC中CFile对象实现了磁盘文档的读写,但是大部分MFC应用程序的IO服务都使用CArchive对象来完成.不管CFile和Archive输入输出的都是二进制数据,非文本数据. int a ...

  5. VC++ chap13 文档与串行化

    Lesson 13 文档与串行化 13.1使用CArchive类对文件进行读写操作 //让对象数据持久性的过程称之为串行化,或者序列化 void CGraphicView::OnFileWrite() ...

  6. 【PHP面向对象(OOP)编程入门教程】22.把对象串行化serialize()方法,__sleep()方法,__wakeup()方法

    有时候需要把一个对象在网络上传输,为了方便传输,可以把整个对象转化为二进制串,等到达另一端时,再还原为原来的对象,这个过程称之为串行化(也叫序列化), 就像我们现在想把一辆汽车通过轮船运到美国去,因为 ...

  7. PHP面向对象(OOP):把对象串行化serialize()方法,__sleep()方法,__wakeup()方法

    有时候需要把一个对象在网络上传输,为了方便传输,可以把整个对象转化为二进制串,等到达另一端时,再还原为原来的对象,这个过程称之为串行化(也叫序列化), 就像我们现在想把一辆汽车通过轮船运到美国去,因为 ...

  8. JavaEE 对象的串行化(Serialization)

    什么情况下需要序列化 a)当你想把的内存中的对象写入到硬盘的时候:b)当你想用套接字在网络上传送对象的时候:c)当你想通过RMI传输对象的时候:再稍微解释一下:a)比如说你的内存不够用了,那计算机就要 ...

  9. 关于ORACLE的串行化隔离级别--来自ORACLE概念手册

    为了描述同时执行的多个事务如何实现数据一致性,数据库研究人员定义了被 称为串行化处理(serializability)的事务隔离模型(transaction  isolation model).当所有 ...

随机推荐

  1. web端文字转语音的几种方案

    最近在开发一个微信排队取号的的系统,其中对于服务员端(管理端) 需要有呼叫功能,即点按钮 就播出"xxx号顾客请就座"的声音. 经过在网上一番搜索研究,web端实现指定文字的语音播 ...

  2. 一、Html5基础讲解以及五个标签

    什么是html?html是用来描述网页的一种语言html指超文本标记语言html不是编程语言,是一种标记语言 HTML基础标签 Head.body html标题 <h1>…<h6&g ...

  3. Python网络爬虫http和https协议

    一.HTTP协议 1.官方概念: HTTP协议是Hyper Text Transfer Protocol(超文本传输协议)的缩写,是用于从万维网(WWW:World Wide Web )服务器传输超文 ...

  4. nginx 本地映射

    server{ listen 80; server_name www.test.com; ssi on; ssi_silent_errors on; //设置为on则在处理SSI文件出错时不输出错误信 ...

  5. 微信小程序笔记<三>入口app.js —— 注册小程序

    小程序开发框架在逻辑层使用的语言就是JavaScript,所以想玩小程序JavaScript的基本功一定要扎实.但小程序基于js做了一些修改,以方便开发者更方便的使用微信的一些功能,使得小程序更好的贴 ...

  6. leetCode 557. Reverse Words in a String I

    Input: "Let's take LeetCode contest" Output: "s'teL ekat edoCteeL tsetnoc" 解:输入一 ...

  7. glibc -The GNU C Library

    1.使用库文件 1.1.头文件 C库实际包含两部分:头文件,实际的库文件.头文件定义类型.定义宏.声明变量.声明函数.头文件定义的内容实际在库文件中实现.需要使用到 C库 的某些功能时,程序源文件包含 ...

  8. MySQL死锁问题分析及解决方法实例详解(转)

      出处:http://www.jb51.net/article/51508.htm MySQL死锁问题是很多程序员在项目开发中常遇到的问题,现就MySQL死锁及解决方法详解如下: 1.MySQL常用 ...

  9. <项目管理的决策力>总结梳理

    最近去总部参加了两天培训,关于<项目管理的决策力>,有时间会整理一下思路. ---todo 总结 6个阶段30个决策点如下:

  10. [Lua]table(二):删除与排序

    function PrintTable(tb) for k,v in pairs(tb) do print(v) end print("-------------------") ...