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)
{
	
}









發佈了134 篇原創文章 · 獲贊 7 · 訪問量 8萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章