C++ //练习 13.34 编写本节所描述的Message。

C++ Primer(第5版) 练习 13.34

练习 13.34 编写本节所描述的Message。

环境:Linux Ubuntu(云服务器)
工具:vim

 

代码块
/*************************************************************************
	> File Name: ex13.34.cpp
	> Author: 
	> Mail: 
	> Created Time: Thu 25 Apr 2024 09:28:32 AM CST
 ************************************************************************/

#include<iostream>
using namespace std;

class Messsage{
    friend class Folder;
    friend void swap(Message &lhs, Message &rhs);
    public:
    explicit 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 &);
    void remove_from_Folders();
};

Message::Message(const Message &m): contents(m.contents), folders(m.folders){
    add_to_Folders(m);
}

Message &Message::operator= (const Message &rhs){
    remove_from_Folders();
    contents = rhs.contents;
    folders = rhs.folders;
    add_to_Folders(rhs);
    return *this;
}

Message::~Message(){
    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::add_to_Folders(const Message &m){
    for(auto f : m.folders){
        f->addMsg(this);
    }
}

void Message::remove_from_Folders(){
    for(auto f : folders){
        f->remMsg(this);
    }
}

void swap(Messsage &lhs, Messsage &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);
    }
}

相关推荐

  1. C++ //练习 13.34 编写描述Message

    2024-04-25 10:52:03       33 阅读
  2. C 练习实例83-求0—7能组成奇数个数

    2024-04-25 10:52:03       43 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-04-25 10:52:03       98 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-04-25 10:52:03       106 阅读
  3. 在Django里面运行非项目文件

    2024-04-25 10:52:03       87 阅读
  4. Python语言-面向对象

    2024-04-25 10:52:03       96 阅读

热门阅读

  1. 学习 Rust 的第十天:枚举和模式匹配

    2024-04-25 10:52:03       34 阅读
  2. 桌面运维类面试非技术问题

    2024-04-25 10:52:03       30 阅读
  3. yolov5 C3改进|深度可分离卷积轻量化主干

    2024-04-25 10:52:03       35 阅读
  4. mysql的基本用法

    2024-04-25 10:52:03       33 阅读
  5. Netty websocket配置wss

    2024-04-25 10:52:03       34 阅读
  6. 【QEMU系统分析之启动篇(十一)】

    2024-04-25 10:52:03       37 阅读
  7. Edge 浏览器的使用心得与深度探索

    2024-04-25 10:52:03       35 阅读
  8. Elasticsearch 索引数据多了,调优,部署方案

    2024-04-25 10:52:03       41 阅读
  9. 【产品经理修炼之道】- 政务G端产品建设指南

    2024-04-25 10:52:03       40 阅读