c++ primer 13.4

#pragma once


#include <string>
#include <set>
#include <iostream>


class CFolder;

class CMessage
{
	public:
		CMessage(const std::string &strMsg = "");

		// 复制构造函数
		CMessage(const CMessage& refObj);

		CMessage & operator=(const CMessage &rhs);
		
	public:
		void save(CFolder &folder);

		void remove(CFolder &folder);

	private:
		void put_msg_in_folers(const std::set<CFolder*> &);

		void remove_msg_from_folders();

		
	private:
		std::string        m_strMsg;      // 消息内容

		std::set<CFolder*>  m_setlpFolder;
};


class CFolder
{
public:
	CFolder();
	~CFolder();

	public:
		void add_msg(CMessage *lpMsg);

		void remove_msg(CMessage *lpMsg);

	private:
		CMessage *m_lpMsg;
};

#include "message.hpp"

CMessage::CMessage(const std::string &strMsg):m_strMsg(strMsg)
{
	
}

CMessage:: CMessage(const CMessage &refObj):m_strMsg(refObj.m_strMsg), m_setlpFolder(refObj.m_setlpFolder)
{
	put_msg_in_folers(m_setlpFolder);
}

CMessage & CMessage::operator=(const CMessage &rhs)
{
	if(&rhs != this)
	{
		remove_msg_from_folders();

		m_strMsg = rhs.m_strMsg;

		m_setlpFolder = rhs.m_setlpFolder;

		put_msg_in_folers(rhs.m_setlpFolder);
	}

	return *this;
}

void CMessage::put_msg_in_folers(const  std::set < CFolder * > &rhs)
{
	std::set<CFolder*>::const_iterator sentry = rhs.begin();

	while(rhs.end() != sentry)
	{
		(*sentry)->add_msg(this);
		++sentry;
	}
}

void CMessage::remove_msg_from_folders()
{
	std::set<CFolder*>::const_iterator sentry = m_setlpFolder.begin();

	while(m_setlpFolder.end() != sentry)
	{
		(*sentry)->remove_msg(this);

		++sentry;
	}
}

void CMessage::save(CFolder & folder)
{
	folder.add_msg(this);
	std::cout << "消息加入到folder" << std::endl;
}


// CFolder
CFolder::CFolder()
{
	
}

CFolder::~CFolder()
{
	
}

void CFolder::add_msg(CMessage * lpMsg)
{
	m_lpMsg = lpMsg;
}

void CFolder::remove_msg(CMessage *lpMsg)
{
	
}









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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值