void CPerson::Serialize(CArchive &ar)//自定义的串行化函数!
{
CObject::Serialize(ar);
if (ar.IsStoring())
{
ar<<m_sName<<m_iAge<<m_iMaritalStatus<<m_bEmployed;
}
else
{
ar>>m_sName>>m_iAge>>m_iMaritalStatus>>m_bEmployed;
}/**/
}class CMFC_SerializeView : public CFormView
{
protected: // create from serialization only
......
private:
CPerson* m_pCurPerson;自定义的类指针!
void PopulateView();
};class CMFC_SerializeDoc : public CDocument
{
.....
private:
CObArray m_oaPeople;//指向一个CPerson类!COArray可以存放任何从CObject派生出的对象!
int m_iCurPostition;
};void CMFC_SerializeDoc::Serialize(CArchive& ar)
{
m_oaPeople.Serialize(ar);
}
请问最后一段代码中的“m_oaPeople.Serialize(ar);”为什么就可以实现全部的数据读取?
谢谢!
{
CObject::Serialize(ar);
if (ar.IsStoring())
{
ar<<m_sName<<m_iAge<<m_iMaritalStatus<<m_bEmployed;
}
else
{
ar>>m_sName>>m_iAge>>m_iMaritalStatus>>m_bEmployed;
}/**/
}class CMFC_SerializeView : public CFormView
{
protected: // create from serialization only
......
private:
CPerson* m_pCurPerson;自定义的类指针!
void PopulateView();
};class CMFC_SerializeDoc : public CDocument
{
.....
private:
CObArray m_oaPeople;//指向一个CPerson类!COArray可以存放任何从CObject派生出的对象!
int m_iCurPostition;
};void CMFC_SerializeDoc::Serialize(CArchive& ar)
{
m_oaPeople.Serialize(ar);
}
请问最后一段代码中的“m_oaPeople.Serialize(ar);”为什么就可以实现全部的数据读取?
谢谢!
// Serializationvoid CObArray::Serialize(CArchive& ar)
{
ASSERT_VALID(this); CObject::Serialize(ar); if (ar.IsStoring())
{
ar.WriteCount(m_nSize);
for (INT_PTR i = 0; i < m_nSize; i++)
ar << m_pData[i];
}
else
{
DWORD_PTR nOldSize = ar.ReadCount();
SetSize(nOldSize);
for (INT_PTR i = 0; i < m_nSize; i++)
ar >> m_pData[i];
}
}
ar >> 和 ar << 由 ar.IsStoring()决定, 而ar.IsSroring又由 创建时设置的mode也就是CArchive::store或CArchive::load决定。