[转]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.要求