13.4 拷贝控制示例
练习
13.33
因为如果形参类型是const Folder&,那边形参是一个常量。
那么folders的类型必须是常量指针。
那么调用的Folder的AddMsg和remMsg就必须是常量函数。
而这两个函数肯定会修改Folder中数据成员的值,因此不能被设置为常量函数。
所以只能讲save和remove的形参定义为非const类型。
13.34
class Message {
friend class Folder;
public:
friend void swap(Message& lhs, Message& rhs);
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 add_to_Folders(const Message& m);
void remove_from_Folders();
};
void Message::save(Folder& f) {
folders.insert(&f);
f.addMsg(this);
}
void Message::remove(Folder&f) {
folders.erase(&f);
f.remMsg(this);
}
void Message::