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