25、深入浅出MFC学习笔记,Document-View再学习(2)

1、型录网就是CRuntimeClass组成的一个链表。应用程序使用DECLARE_SERIALIMPLEMENT_SERIAL两个宏,就获得文件读写以及动态创建两种机制。

wps_clip_image-15145

2Serializable的必要条件

    欲让一个对象有Serialize能力,它必须派生自一个Serializable类,一个类意欲成为Serializable,必须有下列五大条件:

  1)从CObject派生下来,如此以来可保有RTTIDynamic Creation等机能。

  2)类的声明部分必须有DECLARE_SERIAL宏。此宏需要一个参数:类名称。

  3)类的实现部分必须有IMPLEMENT_SERIAL宏。此宏需要三个参数:一是类名称,二是基类名称,三是schema no.

  4)改写Serialize虚拟函数、使它能够适当地把类的成员变量写入档案中。

  5)为此类加上一个default构造函数(也就是无参之构造函数)。因为若一个对象来自档案,MFC必须先动态生成它,而且是没有任何参数的情况下调用其构造函数,然后才从档案中读出对象数据。

一个C++类如果希望有Serialization机制,它的第一件就是直接或间接派生自CObject,为的是继承下列三个运算符:[1,P399]

// in AFX.INL _AFX_INLINE CArchive& AFXAPI operator<<(CArchive& ar, const CObject* pOb) { ar.WriteObject(pOb); return ar; } _AFX_INLINE CArchive& AFXAPI operator>>(CArchive& ar, CObject*& pOb) { pOb = ar.ReadObject(NULL); return ar; } _AFX_INLINE CArchive& AFXAPI operator>>(CArchive& ar, const CObject*& pOb) { pOb = ar.ReadObject(NULL); return ar; }

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/zysspj.html