zoukankan      html  css  js  c++  java
  • Messages的例子

    13.33 13.36 13.37

    Message.h

    #ifndef MESSAGE_H
    #define MESSAGE_H
    #include<iostream>
    #include<string>
    #include<set>
    #include"Folder.h"
    using namespace std;
    class Folder;
    class Message
    {
    friend class Folder;
    public:
        explicit Message(const string &str=""):contents(str) {}
        Message(const Message&);
        Message& operator=(const Message&);
        ~Message();
        void save(Folder&);
        void remove(Folder&);
        void addFolder(Folder*);
        void remFolder(Folder*);
        void swap(Message&,Message&);
    private:
        string contents;
        set<Folder*> folders;
        void add_to_Folders(const Message&);
        void remove_to_Folders();
    };
    
    #endif

    Message.cpp

    #include"Message.h"
    
    void Message::save(Folder &f)
    {
        folders.insert(&f);
        f.addMsg(this);
    }
    
    void Message::remove(Folder &f)
    {
        folders.erase(&f);
        f.remMsg(this);
    }
    
    void Message::add_to_Folders(const Message& m)
    {
        for(auto f:m.folders)
            f->addMsg(this);
    }
    
    void Message::remove_to_Folders()
    {
        for(auto f:folders)
            f->remMsg(this);
    }
    
    Message::Message(const Message &m):contents(m.contents),folders(m.folders)
    {
        add_to_Folders(m);
    }
    
    Message& Message::operator=(const Message& m)
    {
        remove_to_Folders();
        contents=m.contents;
        folders=m.folders;
        add_to_Folders(m);
        return *this;
    }
    
    Message::~Message()
    {
        remove_to_Folders();
    }
    
    void Message::addFolder(Folder* f)
    {
        folders.insert(f);
    }
    
    void Message::remFolder(Folder* f)
    {
        folders.erase(f);
    }
    void Message::swap(Message &lhs,Message &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);
    }

    Folder.h

    #ifndef FOLDER_H
    #define FOLDER_H
    #include<iostream>
    #include<set>
    #include<string>
    using namespace std;
    class Message;
    class Folder
    {
    friend class Message;
    private:
        set<Message*> msg;
    public:
        void addMsg(Message*);
        void remMsg(Message*);
    };
    #endif // FOLDER_H

    Folder.cpp

    #include"Folder.h"
    #include"Message.h"
    void Folder::addMsg(Message *m)
    {
        msg.insert(m);
    }
    
    void Folder::remMsg(Message *m)
    {
        msg.erase(m);
    }
  • 相关阅读:
    于丹的婚姻观
    相貌与成功的关系—俞敏洪6月2号在同济大学的演讲
    NetBeans IDE 6.9.1 发布
    NetBeans IDE 6.9.1 发布
    NetBeans 时事通讯(刊号 # 112 Aug 05, 2010)
    VS Feature Pack学习之使用CMFCMenuBar自定义菜单栏
    使用 Apache Wink、Eclipse 和 Maven 开发 RESTful Web 服务
    Have to run sudo dhclient eth0 automatically every boot
    java regex
    HTTPCLIENT 解决乱码方案 linfeng_0212的日志 网易博客
  • 原文地址:https://www.cnblogs.com/wuchanming/p/3928310.html
Copyright © 2011-2022 走看看