C++ //练习 13.36 设计并实现对应的Folder类。此类应该保存一个指向Folder中包含的Message的set。

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

练习 13.36 设计并实现对应的Folder类。此类应该保存一个指向Folder中包含的Message的set。

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

 

代码块
/*************************************************************************> File Name: ex13.36.cpp> Author: > Mail: > Created Time: Thu 25 Apr 2024 09:28:32 AM CST************************************************************************/#include<iostream>
using namespace std;class Folder;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 addFolder(Folder *);void remFolder(Folder *);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::addFolder(Folder *f){folders.insert(f);
}void Message::remFolder(Folder *f){folders.erase(f);
}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);}
}class Folder{friend class Message;friend void swap(Message &, Message &);public:Folder() = default;Folder(const Folder &);Folder &operator= (const Folder &);~Folder();private:set<Message*> msgs;void addMsg(Message *);void remMsg(Message *);void add_to_Messages(const Folder &);void remove_to_Messages();
};Folder::Folder(const Folder &f){add_to_Messages(f);
}Folder& Folder::operator= (const Folder &f){remove_to_Messages();msgs = f.msgs;add_to_Messages(f);return *this;
}Folder::~Folder(){remove_to_Messages();
}void Folder::addMsg(Message *m){msgs.insert(m);
}void Folder::remMsg(Message *m){msgs.erase(m);
}void Folder::add_to_Messages(const Folder &f){for(auto m : f.msgs){m->addFolder(this);}
}void Folder::remove_from_Message(){for(auto m : msgs){m->remFolder(this);}
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/diannao/3076.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

企业集成平台建设方案(技术方案+功能设计)

企业集成平台建设方案及重点难点攻坚 基础支撑平台主要承担系统总体架构与各个应用子系统的交互&#xff0c;第三方系统与总体架构的交互。需要满足内部业务在该平台的基础上&#xff0c;实现平台对于子系统的可扩展性。基于以上分析对基础支撑平台&#xff0c;提出了以下要求&…

《2024年网络弹性风险指数报告》:92%的组织并未准备好应对AI安全挑战

网络弹性是一个比传统网络安全更大、更重要的范例&#xff0c;拥有有效网络弹性能力的组织能在承受网络攻击、技术故障或故意篡改企图后迅速恢复正常业务运营。近日&#xff0c;Absolute security公司发布的《2024年网络弹性风险指数报告》旨在评估当今全球企业的网络弹性状况&…

【Spring AI 来了】

spring官方已经有Spring AI 插件&#xff0c;每个程序员必定拥抱AI&#xff0c;也意味着不就以后AI的open API 会成为我们开发成的基础jdk。 下面的内容也是AI直接根据网址给我翻译的&#xff0c;连格式都是生成的。AI应用已经渗透到各行各业了&#xff0c;并且会改变我们每个…

麒麟 Kylin V10 一键安装 Oracle 11GR2 单机 ASM(231017)

前言 Oracle 一键安装脚本&#xff0c;演示麒麟 Kylin V10 一键安装 Oracle 11GR2 单机 ASM&#xff08;231017&#xff09;过程&#xff08;全程无需人工干预&#xff09;&#xff1a;&#xff08;脚本包括 ORALCE PSU/OJVM 等补丁自动安装&#xff09; ⭐️ 脚本下载地址&a…

网站网站网站

一个基于 DevUI Design 的 Vue3 组件库Home | Vue DevUI (gitee.io)https://vue-devui.gitee.io/

AI-数学-高中-42导数的概念与意义

原作者视频&#xff1a;【导数】【一数辞典】1导数的概念与意义_哔哩哔哩_bilibili .a是加速度&#xff1b;

CSS盒子模型的认识

前言&#xff1a; 当我们打开一个网页使用F12进行调试时&#xff0c;经常可以看到如下图片&#xff0c;这便是一个盒子。 什么是盒子&#xff1a; 所谓盒子模型&#xff08;Box Model&#xff09;就是把 HTML 页面中的元素看作是一个矩形的盒子&#xff0c;也就是一个盛装内容的…

大模型(e.g., ChatGPT)里面的一些技术和发展方向

文章目录 如何炼成ChatGPT如何调教ChatGPT如何武装ChatGPT一些大模型的其他方向prompt tuningInstruction tuning 这个是基于视频 https://www.bilibili.com/video/BV17t4218761&#xff0c;可以了解一下大模型里面的一些技术和最近的发展&#xff0c;基本都是2022你那以来的发…

【超简单实用】Zotero 7 内置pdf背景颜色更改插推荐以及安装

Zotero beta7 pdf 内置颜色更换 zetore 6 很多成熟的插件在 zetore 7都不能用了。版本回退看起来内置文章的注释会被消除&#xff0c;所以又不想退回去。前几个月在找beta 7 的pdf 护眼色的插件一直没有&#xff0c;今天终于发现了&#xff01;&#xff01;&#xff01;&#…

黑龙江—等保测评三级安全设计思路

需求分析 6.1、 系统现状 6.2、 现有措施 目前&#xff0c;信息系统已经采取了下述的安全措施&#xff1a; 1、在物理层面上&#xff0c; 2、在网络层面上&#xff0c; 3、在系统层面上&#xff0c; 4、在应用层面上&#xff0c; 5、在管理层面上&#xff0c; 6.…

STM32点灯大师(点了一颗LED灯,轮询法)

配置操作&#xff1a; 一、使用CubeMX配置到大致的操作 1.1 选择芯片 1.2 选择引脚&#xff08;根据电路图&#xff09; 1.3 配置gpio口 1.4 配置系统 1.5文件项目操作 最后就是点击 二、点击CubeMX生成的代码&#xff0c;并且修改代码 2.1 看看效果 2.2 写代码

听力知识|小耳朵,你了解多少?

每天接收好多讯息和知识 那么小耳朵是如何做到的呢&#xff1f; 我们每一个人都有一双独一无二的耳朵。 你知道吗&#xff1f; 即使每一个人的耳朵看起来都很相似&#xff0c; 可是从来也没有一模一样的耳朵 即便是你的左右耳也不完全相同。 人体五种感觉是指&#xff1a;…

故障诊断 | 基于1DCNN和2DCNN的智能诊断模型—用于机械设备故障诊断

传统机械设备状态监测方法的局限性 严重依赖专家经验: 对于机泵振动信号,时频分析如小波变换、维格纳分布及自适应分解EEMD等方法被用来提取特征,神经网络、支持向量机、决策树、模糊逻辑等方法被用于对机泵的运行状态进行分类。 但由于特征值是根据专家经验进行提取的,对…

若依ruoyi-vue前端页签缓存设置

页签缓存 利用路由元信息&#xff08;meta&#xff09; 在路由配置中&#xff0c;为需要缓存的路由设置 keepAlive 属性为 true。例如&#xff1a; {path: /system/user,name: User,component: () > import(/views/system/user/user.vue),meta: { keepAlive: true } }注意…

【C++】C++中的构造函数和析构函数详解

欢迎来到CILMY23的博客 本篇主题为&#xff1a;C中的构造函数和析构函数详解 个人主页&#xff1a;CILMY23-CSDN博客 系列专栏&#xff1a;Python | C | C语言 | 数据结构与算法 感谢观看&#xff0c;支持的可以给个一键三连&#xff0c;点赞关注收藏。 写在前头&#xff1…

stm32_HAL_串口不定长数据接收发送

串口代码思路//不包括初始化 变量 uint8_t tx1[256];//缓冲区uint8_t Tx1_size0;//记录数据的个数 接收 产生第一个数据接收-----进入中断----复制数据-----继续接收----在进入中断----复制数据---在接收直到串口第一次数据全部接收完 中断源码 利用中断经行计算字符个数…

社交媒体数据恢复:KaokaoTalk

KaokaoTalk数据恢复方法 一、数据恢复的基本步骤 在进行KaokaoTalk数据恢复时&#xff0c;首先需要确保你已经停止使用该设备&#xff0c;以防止新的数据覆盖丢失的数据。接下来&#xff0c;你可以按照以下步骤进行操作&#xff1a; 备份数据&#xff1a;在尝试恢复数据之前&a…

深入理解Vue插槽

子组件ChildComp.vue <template><slot></slot><slot name"slot1"></slot><slot name"slot2" msg"hello world"></slot> </template>父组件App.vue <script setup> import { ref } from…

【SpringCloud】OpenFeign服务接口调用快速入门

【SpringCloud】OpenFeign服务接口调用快速入门 文章目录 【SpringCloud】OpenFeign服务接口调用快速入门1. 概述2. 引入依赖3. 配置、测试 1. 概述 官网地址&#xff1a;点击跳转 Feign是一个声明性web服务客户端。它使编写web服务客户端变得更容易。使用 Feign 创建一个接口…