《C++ Primer》 P415 消息处理机制 源代码
来源:互联网 发布:阿里云os电视 编辑:程序博客网 时间:2024/06/06 12:56
《C++ Primer》消息处理机制 源代码
#include <iostream>#include <set>#include <string>class Message;/////////////////////////////////////////////类Folderclass Folder{public:Folder(){}Folder(const Folder&);~Folder();void save(Message&);void remove(Message&);void addMsg(Message*);void remMsg(Message*);Folder & operator=(const Folder &rhs);private:std::set<Message*>messages;void put_Fldr_in_Messages(const std::set<Message*>&);void remove_Fldr_from_Messages();};////////////////////////////////////////////////////类Messageclass Message{public:Message(const std::string &str= ""): contents(str){} Message(const Message &); Message& operator=(const Message&); ~Message(); void save(Folder&); void remove(Folder&); void addFldr(Folder*); void remFldr(Folder*);private:std::string contents;std::set<Folder*> folders;void put_Msg_in_Folders(const std::set<Folder*>&);void remove_Msg_from_Folders();};////////////////////////////////////////////类Folder实现部分Folder::Folder(const Folder &f):messages(f.messages){put_Fldr_in_Messages(messages);}void Folder::put_Fldr_in_Messages(const std::set<Message*> &rhs){for(std::set<Message*>::const_iterator beg = rhs.begin();beg != rhs.end();++beg){(*beg)->addFldr(this);}}Folder & Folder::operator=(const Folder &rhs){if (&rhs != this){remove_Fldr_from_Messages(); //这里一定要移除message,因为如果只是覆盖的话,你并不知道对方的长度是不是和你的一样messages = rhs.messages;put_Fldr_in_Messages(rhs.messages);}return *this;}void Folder::remove_Fldr_from_Messages(){for (std::set<Message*>::const_iterator beg = messages.begin();beg != messages.end();++beg){(*beg)->remFldr(this);}}Folder::~Folder(){remove_Fldr_from_Messages();}void Folder::save(Message& msg){addMsg(&msg);msg.addFldr(this);}void Folder::remove(Message& msg){remMsg(&msg);msg.remFldr(this);}void Folder::addMsg(Message* msg){messages.insert(msg);}void Folder::remMsg(Message* msg){messages.erase(msg);}////////////////////////////////////////////类Message实现部分Message::Message(const Message &m):contents(m.contents),folders(m.folders){put_Msg_in_Folders(folders);}void Message::put_Msg_in_Folders(const std::set<Folder*>& rhs){for(std::set<Folder *>::const_iterator beg = rhs.begin();beg != rhs.end(); ++ beg){(*beg)->addMsg(this);}}Message& Message::operator =(const Message &rhs){if (&rhs !=this){remove_Msg_from_Folders();contents = rhs.contents;folders = rhs.folders;put_Msg_in_Folders(rhs.folders);}return *this;}void Message::remove_Msg_from_Folders(){for (std::set<Folder*>::const_iterator beg =folders.begin(); beg != folders.end(); ++ beg){(*beg)->remMsg(this);}}Message::~Message(){remove_Msg_from_Folders();}void Message::save(Folder& fldr){addFldr(&fldr);fldr.addMsg(this);}void Message::remove(Folder& fldr){remFldr(&fldr);fldr.remMsg(this);}void Message::addFldr(Folder* fldr){folders.insert(fldr);}void Message::remFldr(Folder* fldr){folders.erase(fldr);}int main(){ Message msg1("new message !"); Folder fldr1;msg1.save(fldr1) ; return 0;}
- 《C++ Primer》 P415 消息处理机制 源代码
- C++primer 消息处理示例
- c++primer 复制控制-消息处理示例
- c++:primer plus 源代码
- Handler异步消息处理机制,从源代码看起
- 立此存照(20)[C++]C++ Primer(4th)消息处理示例
- C++ primer 13.4消息处理
- C++ Primer消息处理示例
- C++ Primer 消息处理示例
- Android消息处理机制之二:消息中obtain源代码剖析
- c++primer 文本查询 源代码
- Lenix消息机制源代码分析
- object-C 类之间的消息处理机制
- 消息处理机制
- windows消息处理机制
- windows消息处理机制
- Android 消息处理机制
- windows消息处理机制
- 《Effective C++》读书笔记之item33:避免遮掩继承而来的名称
- 出到IT行业的感想
- Neil Young:谈游戏ARPDAU及榜单排名意义
- 20120810链接
- Android中隐式Intent的用途(2) -- 实用案例
- 《C++ Primer》 P415 消息处理机制 源代码
- 杭电1180
- CF 134 DIV1 B.Blackboard Fibonacci
- 字符设备驱动模型
- 理顺思绪,扬帆再发
- 补码的探索
- C语言中将数字转化为字符串
- http://www.useragentman.com/blog/2010/07/27/creating-cross-browser-html5-forms-now-using-modernizr-w
- 数据结构与算法之单链表 自己实现STL list模板类