1. Message類
class Message{
public:
Message(const string &str = ""):contents(str){}
Message(const Message&);
Message& operator=(const Message&);
~Message();
void save(Folder&);
void remove(Folder&);
private:
string contents;
set<Folder*> folders;
void put_Msg_in_Folders(const set<Folder*>&);
void remove_Msg_from_Folders();
};
2. Message類的復制控制
Message::Message(const Message &msg):contents(msg.contents),folders(msg.folders)
{
put_Msg_in_Folders(folders);
}
編寫自己的復制構造函數時,必須顯式復制需要復制的任意成員。顯式定義的復制構造函數不會進行任何自動復制。
像其他任何構造函數一樣,如果沒有初始化某個類成員,則那個成員用該成員的默認構造函數初始化。復制構造函數中的默認初始化不會使用成員的復制構造函數。
3. put_Msg_in_Folder成員
void Message::put_Msg_in_Folders(const set<Folder*>& folders)
{
for(set<Folder*>::const_iterator beg = folders.begin();beg!=folders.end();++beg)
{
(*beg)->addMsg(this);
}
}
4. Message賦值操作符 www.2cto.com
Message& Message::operator=(const Message& msg)
{
if(&msg != this)
{
remove_Msg_from_Folders();
contents = msg.contents;
folders = msg.folders;
put_Msg_in_Folders(msg.folders);
}
}
即使對象賦值給自己,賦值操作符的正確工作也非常重要。保證這個行為的通用方式是顯式檢查對自身的賦值。
5. remove_Msg_from_Folders成員
void Message::remove_Msg_from_Folders()
{
for(set<Folder*>::const_iterator beg=folders.begin();beg!=folders.end();++beg)
{
(*beg)->removeMsg(this);
}
}
6. Message的析構函數
Message::~Message()
{
remove_Msg_from_Folders();
}
摘自 xufei96的專欄