#include<iostream>
#include<cstdio>
#include<cstring>
using namespace std;
#include<afx.h>
class CBook:public CObject{//序列化的类一定是CObject直接或问题派生的
public:
DECLARE_SERIAL(CBook);//分别使用.h中DECLARE_SERIAL和cpp中IMPLEMENT_SERIAL宏。
CBook();//至少有一个无参数的构造函数
CBook(CString _name,double _price);
void print();
virtual void Serialize(CArchive &ar);//重载基类的Serialize函数
protected:
CString m_name;
double m_price;
};
//.cpp
IMPLEMENT_SERIAL(CBook,CObject,1)
CBook::CBook(){
}
CBook::CBook(CString _name,double _price){
m_name=_name;
m_price=_price;
}
void CBook::Serialize(CArchive &ar){
CObject::Serialize(ar);
if(ar.IsStoring()){//写
ar<<m_name<<m_price;
}else{//读
ar>>m_name>>m_price;
}
}
void CBook::print(){
CString s;
s.Format(_T("书名:%s 价格:%f"),m_name,m_price);
MessageBox(0,s,0,0);
}
int main(){
CString path=_T("C:\\book.txt");
//序列化
CBook bk("MyBookName",10000);
CFile file(path,CFile::modeWrite|CFile::modeCreate);
CArchive ar(&file,CArchive::store);
CBook *pBk=&bk;//能被序列化的只能指针型
ar<<pBk;
ar.Close();
file.Close();
//反序列化
CFile _file(path,CFile::modeRead);
CArchive _ar(&_file,CArchive::load);
CBook *p=new CBook;
_ar>>p;
_ar.Close();
_file.Close();
MessageBox(0,path,0,0);
p->print();
delete p;p=NULL;
system("pause");
return 0;
}
MFC序列化和反序列化
最新推荐文章于 2021-01-29 16:09:07 发布