拷贝控制示例

来源:互联网 发布:超星阅读器 mac 编辑:程序博客网 时间:2024/05/16 18:57

c++primer 拷贝控制实例邮件信息

#include<iostream>#include<set>class Messages;class Folder{public:    Folder(){}    void addMsg(Messages *m)    {        file.insert(m);    }    void remMsg(Messages *m)    {        file.erase(m);    }private:    std::set<Messages*>file;};class Messages{    friend class Folder;public:    explicit Messages(const std::string &str=""):        contents(str){}    Messages(const Messages&);    Messages& operator=(const Messages&);    ~Messages();    void save(Folder&);    void remove(Folder&);    void swap(Messages &lhs,Messages &rhs);private:    std::string contents;    std::set<Folder*>folders;    void add_to_Folders(const Messages&);    void remove_from_Folders();};void Messages::save(Folder &f){    folders.insert(&f);    f.addMsg(this);}void Messages::remove(Folder &f){    folders.erase(&f);    f.remMsg(this);}void Messages::add_to_Folders(const Messages &m){    for(auto f:m.folders)        f->addMsg(this);}Messages::Messages(const Messages &m):    contents(m.contents),folders(m.folders){    add_to_Folders(m);}void Messages::remove_from_Folders(){    for(auto f:folders)        f->remMsg(this);}Messages::~Messages(){    remove_from_Folders();}Messages& Messages::operator=(const Messages &rhs){    remove_from_Folders();    contents=rhs.contents;    folders=rhs.folders;    add_to_Folders(rhs);    return *this;}void Messages::swap(Messages &lhs,Messages &rhs){    using std::swap;    for(auto f:lhs.folders)        f->remMsg(&lhs);    for(auto f:rhs.folders)        f->remMsg(&rhs);    swap(lhs.folders,rhs.folders);    swap(lhs.contents,rhs.contents);    for(auto f:lhs.folders)        f->addMsg(&lhs);    for(auto f:rhs.folders)        f->addMsg(&rhs);}


0 0
原创粉丝点击