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);
}

Messages的例子的更多相关文章

  1. 网络标准之:永远是1.0版本的MIME

    目录 简介 MIME详解 MIME头 MIME-Version Content-Type Content-Disposition Content-Transfer-Encoding Encoded-W ...

  2. Kafka副本管理—— 为何去掉replica.lag.max.messages参数

    今天查看Kafka 0.10.0的官方文档,发现了这样一句话:Configuration parameter replica.lag.max.messages was removed. Partiti ...

  3. Delphi多线程的OnTerminate属性(附加一个关于临界区线程同步的例子)

    首先看TThread源码中关于OnTerminate的代码: public .... property OnTerminate: TNotifyEvent read FOnTerminate writ ...

  4. jquery:validate的例子

    该文档转载自 http://ideabean.javaeye.com/blog/363927 官方网站 http://bassistance.de/jquery-plugins/jquery-plug ...

  5. AgileEAS.NET SOA 中间件平台.Net Socket通信框架-简单例子-实现简单的服务端客户端消息应答

    一.AgileEAS.NET SOA中间件Socket/Tcp框架介绍 在文章AgileEAS.NET SOA 中间件平台Socket/Tcp通信框架介绍一文之中我们对AgileEAS.NET SOA ...

  6. AgileEAS.NET SOA 中间件平台.Net Socket通信框架-完整应用例子-在线聊天室系统-下载配置

    一.AgileEAS.NET SOA中间件Socket/Tcp框架介绍 在文章AgileEAS.NET SOA 中间件平台Socket/Tcp通信框架介绍一文之中我们对AgileEAS.NET SOA ...

  7. [PHP] - Laravel - 列表、新增、修改、删除例子

    前言 Laravel默认是自带了CURD的功能,使用路由的Route::resource可以做到. 但真正的项目中,这往往不是我们所需要的.因为一个项目会有比较复杂的计算.验证等功能. 下面是对项目中 ...

  8. Win32 OpenGL标准例子

    在VS2008的MSDN中有一个标准的OpenGL例子,记录如下: /* * Example of a Win32 OpenGL program. * The OpenGL code is the s ...

  9. Deep learning:四十四(Pylearn2中的Quick-start例子)

    前言: 听说Pylearn2是个蛮适合搞深度学习的库,它建立在Theano之上,支持GPU(估计得以后工作才玩这个,现在木有这个硬件条件)运算,由DL大牛Bengio小组弄出来的,再加上Pylearn ...

随机推荐

  1. 深入探究JavaScript中的比较问题

    先用最近遇到的几个问题做引子: 1 console.log(null==undefined); //true 2 console.log(null==false);//false 3 console. ...

  2. Android使用pull解析xml

    一.理论准备     Pull解析器的运行方式与 SAX 解析器相似.它提供了类似的事件,如:开始元素和结束元素事件,使用parser.next()可以进入下一个元素并触发相应事件.跟SAX不同的是, ...

  3. [原博客] POI系列(4)

    正规.严谨.精妙. -POI BZOJ 1531 : [POI2005]Bank notes 裸的背包,可以二进制拆分一下.一个物品比如说有n个,可以拆成 1,2,4,8,16...个. OJ上没有样 ...

  4. C#中数据库连接的配置文件

    在C#2010中,如何保存和访问数据库的连接字符串呢? 在Winform下要新增App.config文件,在Asp.net下要新增web.config文件. 1.打开配置文件添加相关代码后如下即可: ...

  5. 【Uvalive 2531】 The K-League (最大流-类似公平分配问题)

    [题意] 有n个队伍进行比赛,每场比赛,恰好有一支队伍取胜.一支队伍败.每个队伍需要打的比赛场数相同,给你每个队伍目前已经赢得场数和输得场数,再给你一个矩阵,第 i 行第 j 列 表示队伍 i 和队伍 ...

  6. [wikioi]四色问题

    http://wikioi.com/problem/1116/ 典型的DFS. #include <iostream> #include <memory.h> #define ...

  7. Mono for Android 优势与劣势

    原文:Mono for Android 优势与劣势 最近有兴趣了解一下Mono for Andriod,也就是使用.NET平台来开发Andriod程序.Mono for Android API 几乎映 ...

  8. android 获取 imei号码 及相关信息

    android 获取 imei号码 参考:http://www.cnblogs.com/luxiaofeng54/archive/2011/03/01/1968063.html 核心代码: Imei ...

  9. statspack系列7

    原文:http://jonathanlewis.wordpress.com/2006/12/27/analysing-statspack-7/ 作者:Jonathan Lewis 这是一段Oracle ...

  10. 【转】Linux(ubuntu14.04)上编译Android4.4源码的环境搭建及编译全过程

    原文网址:http://jileniao.net/linux-android-building.html sublime text让我伤心.本来很信任sublime text的自动保存功能,之前使用一 ...