第13章 复制控制(5)
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.zzzyk.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的专栏
补充:软件开发 , C++ ,