CArchive 类的chā入运算符(<<)和提取运算符(>>)对许多C++固有的数据类型进行了
重载,可以直接使用。例如在上面的程序中要对int 的成员变量m_nType 进行串行化,即可
直接使用chā入运算符和提取运算符。下面列出一些被CArchive 类默认支持的数据类型:
? BYTE:8 位无符号整数。
? WORD:16 位无符号整数。
? LONG:32 位带符号整数。
? DWORD:32 位无符号整数。
? float:单精度浮点数。
? double:双精度浮点数。
? int:32 位带符号整数。
? short:16 位带符号整数。
? char:8 位字符类型。
? unsigned:32 位无符号整数。
(2)CString 和CRect 等类型
CString 和CRect 等类型,虽然不是从CObject 派生的类,但是它们有自己针对CArchive
类的重载chā入运算符和提取运算符,因此也可以直接使用这两个运算符进行串行化。
(3)自定义的类
如果序列化的类中包含其他自定义的内嵌对象,则需要处理后再进行串xìng化。例如在
CSampleData 类中添加如下的新数据成员:
public:
CSampleChildData m_data;
将CSampleData 类串行化时,需要对CSampleChildData 进行额外的处理。首先使得
CSampleChildData 继承CObject,然后编写它自己的Serialize()成员函数。这时CSampleData
类的Serialize()函数可以进行如下修改以实现对m_data 的串行化:
void CSampleData::Serialize(CArchive& ar)
{
CObject::Serialize(ar); //进行基类的序列化
if (ar.IsStoring()) {
ar << m_strNcom << m_nType; //保存数据
}
else {
ar >> m_strNcom >> m_nType; //读取数据
}
枫叶文学网www.fywxw.com
Visual C++ 6.0 程序设计从入门到精通
·180·
m_Data.Serialize(ar); //串行化m_Data
}
如果CSampleData 类中的CSampleChildData 对象是通过指针在堆中创建的,则代码如下:
public:
CSampleChildData *m_pData;
将CSampleData 类串行化更为简单。首先需要为CSampleChildData 添加串行化代码,即
继承CObject,并添加相应的宏和构造函数,最后编写CSampleChildData 自己的Serialize()
函数。完成对CSampleChildD