《C++ Primer》 P415 訊息處理機制 原始碼
《C++ Primer》訊息處理機制 原始碼
#include <iostream>
#include <set>
#include <string>
class Message;
///////////////////////////////////////////
//類Folder
class 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();
};
//////////////////////////////////////////////////
//類Message
class 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;
}
相關文章
- 原始碼分析:Android訊息處理機制原始碼Android
- Handler訊息處理機制原始碼解析 上原始碼
- Android非同步訊息處理機制詳解及原始碼分析Android非同步原始碼
- c++ primer 訊息處理示例+課後習題完成C++
- Android訊息機制原始碼分析Android原始碼
- Android應用程式訊息處理機制Android
- Cloud Foundry架構和訊息處理機制Cloud架構
- Android 訊息處理機制:Handler|MessageAndroid
- Windows應用程式的訊息處理機制Windows
- Service初探與非同步訊息處理機制非同步
- Looper中的訊息佇列處理機制OOP佇列
- 全面剖析Android訊息機制原始碼Android原始碼
- Android中的非同步訊息處理機制Android非同步
- Android Handler訊息機制原始碼解讀Android原始碼
- 深入理解Android非同步訊息處理機制Android非同步
- Android 原始碼分析之旅3 1 訊息機制原始碼分析Android原始碼
- 《球球大作戰》原始碼解析——(9)訊息處理原始碼
- OC訊息機制,訊息轉發機制
- Android應用程式訊息處理機制(Looper、Handler)分析AndroidOOP
- C++異常處理機制C++
- Android原始碼解析之一 非同步訊息機制Android原始碼非同步
- 訊息機制
- Android訊息處理機制(Handler、Looper、MessageQueue與Message)AndroidOOP
- 如何生動形象的理解Android Handler訊息處理機制Android
- C++ BUILDER 訊息處理的深入探索 (轉)C++UI
- Runtime 從NullSafe原始碼看訊息轉發 機制Null原始碼
- Linux訊號處理機制Linux
- 詳解 Handler 訊息處理機制(附自整理超全 Q&A)
- iOS訊息機制iOS
- SAP訊息機制
- Android執行緒間訊息機制-Handler原始碼分析(FrameWork)Android執行緒原始碼Framework
- Linux訊號機制與訊號處理Linux
- 訊息機制篇——初識訊息與訊息佇列佇列
- IOS 訊息推送處理iOS
- JMS java 訊息機制Java
- Windows訊息機制概述Windows
- 多種訊息傳送機制,處理合適不??
- Android訊息機制Message訊息池Android