开源 企业版 高校版 私有云 模力方舟 AI 队友
代码拉取完成,页面将自动刷新
捐赠
捐赠前请先登录
扫描微信二维码支付
取消
支付完成
支付提示
将跳转至支付宝完成支付
确定
取消
3 Star 10 Fork 6

secondtonone1/cpplearn

加入 Gitee
与超过 1400万 开发者一起发现、参与优秀开源项目,私有仓库也完全免费 :)
免费加入
已有帐号? 立即登录
文件
master
分支 (1)
master
master
分支 (1)
master
克隆/下载
克隆/下载
提示
下载代码请复制以下命令到终端执行
为确保你提交的代码身份被 Gitee 正确识别,请执行以下命令完成配置
初次使用 SSH 协议进行代码克隆、推送等操作时,需按下述提示完成 SSH 配置
1 生成 RSA 密钥
2 获取 RSA 公钥内容,并配置到 SSH公钥
在 Gitee 上使用 SVN,请访问 使用指南
使用 HTTPS 协议时,命令行会出现如下账号密码验证步骤。基于安全考虑,Gitee 建议 配置并使用私人令牌 替代登录密码进行克隆、推送等操作
Username for 'https://gitee.com': userName
Password for 'https://userName@gitee.com': # 私人令牌
master
分支 (1)
master
cpplearn
/
src
/
msgfolder.cpp
cpplearn
/
src
/
msgfolder.cpp
msgfolder.cpp 4.34 KB
一键复制 编辑 原始数据 按行查看 历史
secondtonone1 提交于 2022年03月02日 15:21 +08:00 . binary && derive
#include "../inc/msgfolder.h"
#include <iostream>
using namespace std;
//将Message保存在指定Folder中
void Message::save(Folder &f)
{
//将文件夹f添加到msg的folders里
this->folders.insert(&f);
//将本msg添加到folder中
f.addMsg(*this);
}
//从Folder中删除Message
void Message::remove(Folder &f)
{
//将文件夹从msg的folders里删除
this->folders.erase(&f);
f.remMsg(*this);
}
//保存指定的msg
void Folder::addMsg(Message &msg)
{
this->msgs.insert(make_pair(msg.contents, &msg));
}
//移除指定的msg
void Folder::remMsg(Message &msg)
{
this->msgs.erase(msg.contents);
}
//将本Message添加到参数msg的folder中
void Message::add_to_Folders(const Message &msg)
{
for (auto f : msg.folders)
{
f->addMsg(*this);
}
}
//拷贝构造函数将m的folders拷贝给自己
Message::Message(const Message &m)
{
contents = m.contents;
folders = m.folders;
add_to_Folders(m);
}
//从folders中的每个Folder删除本Message
void Message::remove_from_Folders()
{
for (auto f : folders)
{
f->remMsg(*this);
}
}
//析构函数
Message::~Message()
{
remove_from_Folders();
}
// 拷贝赋值运算符
Message &Message::operator=(const Message &msg)
{
remove_from_Folders();
contents = msg.contents;
folders = msg.folders;
add_to_Folders(msg);
return *this;
}
void Message::move_Folders(Message *m)
{
//将m的Folders交接给本对象
this->folders = m->folders;
//将本对象和folders关联
for (auto f : folders)
{
//解除folders和m的关联
f->remMsg(*m);
//添加本对象和folders的关联
f->addMsg(*this);
}
//清除m的folders
m->folders.clear();
}
//利用move_Folders函数实现移动构造函数
Message::Message(Message &&m) : contents(std::move(m.contents))
{
move_Folders(&m);
}
Message &Message::operator=(Message &&m)
{
if (this != &m)
{
remove_from_Folders();
contents = std::move(m.contents);
move_Folders(&m);
}
return *this;
}
void Message::printMsg()
{
cout << "contents is " << contents << endl;
}
void swap(Message &lhs, Message &rhs)
{
//将lhs从关联的folders中移除
lhs.remove_from_Folders();
//将rhs从关联的folders中移除
rhs.remove_from_Folders();
//交换两个成员
swap(lhs.contents, rhs.contents);
swap(lhs.folders, rhs.folders);
//重新将lhs添加到关联的folders中
lhs.add_to_Folders(lhs);
//重新将rhs添加到关联的folders中
rhs.add_to_Folders(rhs);
}
Folder::Folder(const Folder &f)
{
this->msgs = f.msgs;
this->name = f.name;
add_msgs(f);
}
//删除folder中的所有msgs
void Folder::remove_msgs()
{
for (auto msgit = this->msgs.begin(); msgit != this->msgs.end();)
{
msgit->second->folders.erase(this);
msgit = this->msgs.erase(msgit);
}
}
// 将f中的msgs添加到本folder中
void Folder::add_msgs(const Folder &f)
{
//将f的msgs添加到本folder
for (auto mp : f.msgs)
{
//将消息保存在本folder
mp.second->save(*this);
}
}
//析构函数
Folder::~Folder()
{
remove_msgs();
msgs.clear();
}
//拷贝赋值运算符
Folder &Folder::operator=(const Folder &f)
{
// 先从本folder的msg解除和本folder的关联
remove_msgs();
//再将f的参数赋值给本folder
this->name = f.name;
this->msgs = f.msgs;
//将msgs添加到本folder
add_msgs(f);
}
void swap(Folder &lf, Folder &rf)
{
//先解除lf的msg和其的联系
lf.remove_msgs();
//再解除rf的msg和其的联系
rf.remove_msgs();
//交换数据结构
swap(lf.msgs, rf.msgs);
swap(lf.name, rf.name);
//最后各自绑定msg和其folder的联系
lf.add_msgs(lf);
rf.add_msgs(rf);
}
void test_msgfolder()
{
auto f1 = new Folder("folder1");
auto msg1 = new Message("msg1");
msg1->save(*f1);
auto f2 = new Folder("folder2");
auto msg2 = new Message("msg2");
msg2->save(*f2);
auto f3 = new Folder(*f1);
*f3 = *f2;
swap(f1, f2);
delete (f1);
delete (msg1);
delete (f2);
delete (msg2);
delete (f3);
auto msg4 = new Message("msg4");
msg4->printMsg();
auto msg3 = new Message("msg3");
msg3->printMsg();
*msg4 = std::move(*msg3);
msg4->printMsg();
delete msg4;
delete msg3;
}
Loading...
举报
举报成功
我们将于2个工作日内通过站内信反馈结果给你!
请认真填写举报原因,尽可能描述详细。
请选择举报类型
取消
发送
误判申诉

此处可能存在不合适展示的内容,页面不予展示。您可通过相关编辑功能自查并修改。

如您确认内容无涉及 不当用语 / 纯广告导流 / 暴力 / 低俗色情 / 侵权 / 盗版 / 虚假 / 无价值内容或违法国家有关法律法规的内容,可点击提交进行申诉,我们将尽快为您处理。

取消
提交

简介

cpp 学习笔记,项目源码
取消

发行版

暂无发行版

贡献者

全部

语言

近期动态

不能加载更多了
编辑仓库简介
简介内容
主页
马建仓 AI 助手
尝试更多
代码解读
代码找茬
代码优化
C++
1
https://gitee.com/secondtonone1/cpplearn.git
git@gitee.com:secondtonone1/cpplearn.git
secondtonone1
cpplearn
cpplearn
master
点此查找更多帮助

搜索帮助

评论
仓库举报
回到顶部
登录提示
该操作需登录 Gitee 帐号,请先登录后再操作。
立即登录
没有帐号,去注册

AltStyle によって変換されたページ (->オリジナル) /