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);
    }
  • 相关阅读:
    java.net.BindException: Address already in use: 解决方法
    openlayers中单击获取要素
    OpenLayers绘制图形
    springboot启动失败( No active profile set, falling back to default profiles: default)
    Java学习日报7.16
    Java学习日报7.15
    Java学习日报7.14
    Java学习日报7.13
    Java学习日报7.12
    Java学习日报7.10
  • 原文地址:https://www.cnblogs.com/wuchanming/p/3928310.html
Copyright © 2011-2022 走看看