CObject

[转]http://blog.sina.com.cn/s/blog_6e7fed390100mlg5.html    CObject类介绍

[转]http://www.vckbase.com/index.php/wv/677 串行化详解

[转]http://hi.baidu.com/cilluick/item/3e98a56e4f151c08a0cf0f73 运行类信息获得详解


CObject是MFC中大部分类的基类,提供了

·支持串行化;(就是把一个对象写入文件和从文件中读取出来的能力,感觉和JSON差不多)

·运行类信息;(知道自己是什么类)

·对象诊断输出;(不知道什么意思)


个人认为CObject主要是实现为了串行化功能


1.背景

我们对c++中的 cin 和 cout 很熟悉 里面用到的>> <<符号很方便。

在MFC中为了将对象存入文件,实现了一个类CArchive 。这个类很方便,和cin,cout一样方便。


CArchive ar(&file,CArchive::load);//file是CFile对象,load还有一个是store

//不太清楚load和store的区别,不过好像这个例子(别处挖来的)应该用store才对,有大牛指导下。

ar >> obj1>>obj2>>obj3...>>objn;


就是这样,但是每个对象都不一样,他是怎么实现准确的存储和提取呢。这个就和CObject十分有关系了。

CArchive 重载了>> <<符号,他们的入参必须是CObject子类的对象。


2.过程

CArchive在实现<<的过程是

1.保存对象的类信息(方便从文件中提取的时候知道这个是什么类)(这个要求对象知道自己是什么类的)

2.调用对象中的void Serialize(CArchive& ar);(真正的类保存是在这个函数中实现的)

抄别人的实现示例:

void CMyDoc::Serialize(CArchive& ar)
{
    if (ar.IsStoring())
    {
    ar << m_Obj_a << m_Obj_b << m_Obj_c;
    }
    else
    {
    ar >> m_Obj_a >> m_Obj_b >> m_Obj_c;
    }
}

CArchive在实现>>的过程是

1.从文件中获得对象的类信息(这个要求知道类信息之后能正确的new一个对象出来)

2.调用对象中的void Serialize(CArchive& ar);

3.至于如何实现类信息的获得,这个是和DECLARE_SERIAL / IMPLEMENT_SERIAL宏有关,这个……




2.要求


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值