你好,欢迎来到电脑编程技巧与维护杂志社! 杂志社简介广告服务读者反馈编程社区  
合订本订阅
 
 
您的位置:技术专栏 / Linux开发
串行化(Serialization)(4)
 
缺省构造函数

  这是CRuntimeClass::CreateObject对对象的要求。

特殊情况

  只通过Serialize函数对对象读写,而不使用ReadObject/WriteObject和运算符重载时,前面的可串行化条件不需要,只要实现Serialize 函数即可。

  对于现存的类,如果它没有提供串行化功能,可以通过使用重载友元operator <<和operator >>来实现。

例子

  假设需要实现一个几何图形显示、编辑程序,支持可扩展的图形功能。这里不想讨论具体图形系统的实现,只讨论图像对象的保存和载入。

基类CPicture

  每个图形对象都从CPicture派生,这个类实现了串行化功能,其实现代码为:

    //头文件picture.h
    #if !defined(__PICTURE_H__)
    #define __PICTURE_H__
    
    #if _MSC_VER > 1000
    #pragma once
    #endif // _MSC_VER > 1000
    
    const int TYPE_UNKNOWN = -1;
    class CPicture:public CObject
    {
      int m_nType;//图形类别
      DECLARE_SERIAL(CPicture)
    public:
      CPicture(int m_nType=TYPE_UNKNOWN):m_nType(m_nType){};
      int GetType()const {return m_nType;};
      virtual void Draw(CDC * pDC);
      void Serialize(CArchive & ar);
    };
    #endif
    //cpp文件picture.cpp
    #include "stdafx.h"
    #include "picture.h"
    
    #ifdef _DEBUG
    #define new DEBUG_NEW
    #undef THIS_FILE
    static char THIS_FILE[] = __FILE__;
    #endif
    
    void CPicture::Draw(CDC * pDC)
    {
      //基类不实现绘图功能,由派生类实现
    }
    
    void CPicture::Serialize(CArchive & ar)
    {
      if(ar.IsLoading())
      {
        ar << m_nType;
      }else{
        ar >> m_nType;
      
      }
    }

  注意:由于CRuntimeClass要求这个对象必须能够被实例化,因此虽然Draw函数没有任何绘图操作,这个类还是没有把它定义成纯虚函数。

(编辑:aniston)

  推荐精品文章

·2024年12月目录 
·2024年11月目录 
·2024年10月目录 
·2024年9月目录 
·2024年8月目录 
·2024年7月目录 
·2024年6月目录 
·2024年5月目录 
·2024年4月目录 
·2024年3月目录 
·2024年2月目录 
·2024年1月目录
·2023年12月目录
·2023年11月目录

  联系方式
TEL:010-82561037
Fax: 010-82561614
QQ: 100164630
Mail:gaojian@comprg.com.cn

  友情链接
 
Copyright 2001-2010, www.comprg.com.cn, All Rights Reserved
京ICP备14022230号-1,电话/传真:010-82561037 82561614 ,Mail:gaojian@comprg.com.cn
地址:北京市海淀区远大路20号宝蓝大厦E座704,邮编:100089