Chinaunix首页 | 论坛 | 博客
  • 博客访问: 334848
  • 博文数量: 214
  • 博客积分: 4258
  • 博客等级: 上校
  • 技术积分: 2021
  • 用 户 组: 普通用户
  • 注册时间: 2010-12-02 09:16
个人简介

http://blog.csdn.net/ly21st http://ly21st.blog.chinaunix.net

文章分类

全部博文(214)

文章存档

2018年(16)

2015年(1)

2014年(2)

2012年(22)

2011年(173)

分类: C/C++

2011-11-26 10:21:37

#include
#include
using namespace std;
class Folder;
class Message {
   public:
      Message(const string &str="") :contents(str) { }
      Message(const Message& msg);
      Message& operator=(const Message& msg);
      void save(Folder &folder);
      void remove(Folder &folder);
      ~Message();
     
   private:
      string contents;
      set folders;
      void put_msg_to_folders(const set &folder);
      void remove_msg_from_folders();
     
   public:
      void addFldr(Folder *folder);
      void remFldr(Folder *folder);
};
class Folder {
   public:
      Folder() {}
      Folder(const Folder& folder);
      Folder& operator=(const Folder& folder);
      ~Folder();
     
      void save(Message &msg);
      void remove(Message &msg);
     
      void addMsg(Message* msg);
      void remMsg(Message* msg);
     
      private:
         set messages;
         void put_Fldr_in_Messages(const set& msgs);
         void remove_Fldr_from_Messages();
};

Message::Message(const Message& msg):contents(msg.contents),folders(msg.folders)
{
   put_msg_to_folders(folders);
}
Message& Message::operator=(const Message& msg)
{
   if(&msg != this) {
      contents=msg.contents;
      remove_msg_from_folders();
      folders=msg.folders;
      put_msg_to_folders(folders);
   } else
      return *this;
}
void Message::put_msg_to_folders(const set &folder)
{
   for(set::const_iterator iter=folder.begin(); iter!=folder.end(); iter++)
      (*iter)->addMsg(this);
}
void Message::remove_msg_from_folders()
{
   for(set::const_iterator iter=folders.begin(); iter!=folders.end(); iter++)
      (*iter)->remMsg(this);
}
Message::~Message()
{
   remove_msg_from_folders();
}
void Message::addFldr(Folder * folder)
{
   folders.insert(folder);
}    
void Message::remFldr(Folder *folder)
{
   folders.erase(folder);
}

void Message::save(Folder &folder)
{
   addFldr(&folder);                          //   folders.insert(&folder);
   folder.addMsg(this);
}
void Message::remove(Folder &folder)
{
   remFldr(&folder);                            //   fodlers.erase(&folder);
   folder.remMsg(this);
}
//////////////////////////////////////////////////////
//////////////////////////////////////////////////////
//////////////////////////////////////////////////////
Folder::Folder(const Folder &folder):messages(folder.messages)
{
   put_Fldr_in_Messages(messages);
}
Folder& Folder::operator=(const Folder &folder)
{
   if(&folder != this) {
      remove_Fldr_from_Messages();
      messages=folder.messages;
      put_Fldr_in_Messages(messages);
   }
   return (*this);
}
Folder::~Folder()
{
   remove_Fldr_from_Messages();
}
void Folder::save(Message &msg)
{
   addMsg(&msg);                //   messages.insert(&msg);
   msg.addFldr(this);
}
void Folder::remove(Message &msg)
{
   remMsg(&msg);                           //   messages.erase(&msg);
   msg.remFldr(this);
}
void Folder::addMsg(Message *msg)
{
     messages.insert(msg);
}
void Folder::remMsg(Message *msg)
{
     messages.erase(msg);
}
void Folder::put_Fldr_in_Messages(const set& msgs)
{
     for(set::const_iterator iter=msgs.begin(); iter !=msgs.end(); iter++)
        (*iter)->addFldr(this);
}
void Folder::remove_Fldr_from_Messages()
{
     for(set::iterator iter=messages.begin(); iter!=messages.end(); iter++)
        (*iter)->remFldr(this);
}
int main()
{
    getchar();
    return 0;
}
阅读(177) | 评论(0) | 转发(0) |
0

上一篇:流迭代器

下一篇:智能指针

给主人留下些什么吧!~~