MFC序列化程序(非继承CObject)

MFC序列化程序(非继承COject)

说明

序列化就是用来保存各种对象状态的程序,一般继承CObject可以使用其序列化的程序,但一般设计一个类完全没有必要继承CObject,所以可以自己写一个类的序列化程序。

程序

在网上找的一个CObject的程序上改出来的。
H文件

#pragma once

// CArwen command target

class CArwen 
{
	
private:
	
public:
	CArwen(void);
	CArwen(CString name1, int age1, CString sex1);
	virtual ~CArwen(void);
	virtual void Serialize(CArchive& ar);
	friend CArchive& operator<<(CArchive& ar, CArwen & it);
	friend CArchive& operator>>(CArchive& ar, CArwen & it);
	friend CArchive& operator<<(CArchive& ar, CArwen * it);
	friend CArchive& operator>>(CArchive& ar, CArwen * it);
	CString name;
	int age;
	CString sex;
	
};

CPP文件

#include "pch.h"
#include "CArwen.h"
#include <string>

// CArwen
CArwen::CArwen(void)
{
}

CArwen::CArwen(CString name1, int age1, CString sex1)
{
	this->name = name1;
	this->age = age1;
	this->sex = sex1;
}

CArwen::~CArwen(void) 
{
}



void CArwen::Serialize(CArchive& ar)
{
	// 接下来再进行派生类部分数据的串行化  
	if (ar.IsStoring()) // 判断是否是写磁盘  
	{    // 写串行化  
		ar << name << age << sex;
	}
	else // 读串行化  
	{
		ar >> name >> age >> sex;
	}
}
// CArwen member functions

CArchive & operator<<(CArchive & ar, CArwen & it)
{
	// TODO: 在此处插入 return 语句
	if (ar.IsStoring())
	{
		ar << it.name << it.age << it.sex;
	}
	return ar;
}

CArchive & operator>>(CArchive & ar, CArwen & it)
{
	// TODO: 在此处插入 return 语句
	if (ar.IsLoading())
	{
		ar >> it.name >> it.age >> it.sex;
	}
	return ar;
}

CArchive & operator<<(CArchive & ar, CArwen * it)
{
	// TODO: 在此处插入 return 语句
	if (ar.IsStoring())
	{
		ar << it->name << it->age << it->sex;
	}
	return ar;
}

CArchive & operator>>(CArchive & ar, CArwen * it)
{
	// TODO: 在此处插入 return 语句
	if (ar.IsLoading())
	{
		ar >> it->name >> it->age >> it->sex;
	}
	return ar;
}

使用使用起来和继承CObject的序列化程序完全一致。

void CMFCApplicationDlg::OnBnClickedButton1()
{
	// TODO: 在此添加控件通知处理程序代码

	CArwen* ren = new CArwen;
	ren->name=CString(_T("123"));
	ren->age=20;
	ren->sex=CString(_T("boy"));

	CFile file;
	if (!file.Open(_T("person.ser"), CFile::modeCreate | CFile::modeWrite))
	{
		return;
	}

	CArchive arStore(&file, CArchive::store);
	arStore << ren;
	arStore.Close();
	file.Close();
}


void CMFCApplicationDlg::OnBnClickedButton2()
{
	// TODO: 在此添加控件通知处理程序代码
	CArwen * ren = new CArwen;
	// TODO: Add your control notification handler code here
	CFile file;
	if (!file.Open(_T("person.ser"), CFile::modeRead))
	{
		return;
	}

	CArchive arLoad(&file, CArchive::load);
	arLoad >> ren;
	arLoad.Close();
	file.Close();
}

最后

学习记录。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值