Skip to content

Commit 5c18c17

Browse files
committed
2015-4-28 add exercise13.4Message_Folder
1 parent 3118ff6 commit 5c18c17

File tree

3 files changed

+150
-0
lines changed

3 files changed

+150
-0
lines changed
8.87 MB
Binary file not shown.
Lines changed: 108 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,108 @@
1+
#include "exercise13.4Message_Folder.h"
2+
3+
/*DOWN*********************Message 类成员*************************************************/
4+
void Message::save(Folder& f)
5+
{
6+
folders.insert(&f);
7+
f.addMsg(this);
8+
}
9+
void Message::remove(Folder& f)
10+
{
11+
folders.erase(&f);
12+
f.remMsg(this);
13+
}
14+
//将本Message添加到指向m的Folder中
15+
void Message::add_to_Folders(const Message& m)
16+
{
17+
for(auto it : m.folders)
18+
{
19+
it->addMsg(this);
20+
}
21+
}
22+
void Message::remove_from_Folders()
23+
{
24+
for(auto it : folders)
25+
{
26+
it->remMsg(this);
27+
}
28+
}
29+
Message::Message(const Message& m)
30+
{
31+
contents = m.contents; //拷贝内容文本
32+
folders = m.folders; //拷贝folders
33+
add_to_Folders(m); //将本消息加到所有包含m的目录中
34+
}
35+
Message::~Message()
36+
{
37+
remove_from_Folders();
38+
}
39+
Message& Message::operator=(const Message& m)
40+
{
41+
remove_from_Folders();
42+
contents = m.contents;
43+
folders = m.folders;
44+
add_to_Folders(m);
45+
return *this;
46+
}
47+
/*UP*********************************Message 类成员*************************************************/
48+
/*DOWN******************************Folder 类成员*************************************************/
49+
Folder::Folder(const Folder& f):Msg(f.Msg)
50+
{
51+
for(auto it : Msg)
52+
{
53+
*it.folders.insert(this);
54+
}
55+
}
56+
Folder::~Folder()
57+
{
58+
for(auto it : Msg)
59+
{
60+
*it.folders.erase(this);
61+
}
62+
}
63+
Folder& Folder::operator=(const Folder& f)
64+
{
65+
for(auto it : Msg)
66+
{
67+
*it.folders.erase(this);
68+
}
69+
Msg = f.Msg;
70+
for(auto it : Msg)
71+
{
72+
*it.folders.insert(&f);
73+
}
74+
75+
}
76+
void Folder::addMsg(Message* s)
77+
{
78+
Msg.insert(s);
79+
}
80+
void Folder::remMsg(Message* s)
81+
{
82+
Msg.erase(s);
83+
}
84+
/*UP********************************Folder 类成员*************************************************/
85+
void swap(Message& m1, Message& m2)
86+
{
87+
using std::swap;
88+
swap(m1.contents, m2.contents); //交换文本内容
89+
//将m1从其目录中删除
90+
for(auto it : m1.folders)
91+
{
92+
it->remMsg(&m1);
93+
}
94+
//将m2从其目录中删除
95+
for(auto it : m2.folders)
96+
{
97+
it->remMsg(&m2);
98+
}
99+
m1.add_to_Folders(m2);
100+
m2.add_to_Folders(m1);
101+
swap(m1.folders, m2.folders);
102+
103+
104+
}
105+
int main()
106+
{
107+
return 0;
108+
}
Lines changed: 42 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,42 @@
1+
#include <iostream>
2+
#include <string>
3+
#include <set>
4+
5+
using namespace std;
6+
class Folder;
7+
class Message
8+
{
9+
friend class Folder;
10+
private:
11+
string contents; //实际文本消息
12+
set<Folder*> folders; //包含本Message的Foulder
13+
//拷贝构造函数、拷贝赋值运算符和析构函数所使用的工具函数
14+
//将本Message添加到指定的Folder中
15+
void add_to_Folders(const Message&);
16+
//从folders中的每个Folder中删除Message
17+
void remove_from_Folders();
18+
public:
19+
//folders被隐式初始化为空集合
20+
Message(const string& str = ""):
21+
contents(str) {} //默认构造函数
22+
Message(const Message& ); //拷贝构造函数
23+
Message& operator=(const Message&); //拷贝复制运算符
24+
~Message(); //析构函数
25+
//从给定Folder集合中添加/删除本Message
26+
void save(Folder&);
27+
void remove(Folder&);
28+
};
29+
void swap(Message& , Message&);
30+
class Folder
31+
{
32+
friend class Message;
33+
private:
34+
set<Message*> Msg;
35+
36+
public:
37+
Folder(const Folder& );
38+
Folder& operator=(const Folder&);
39+
~Folder();
40+
void addMsg(const Message*); //向此Folder中添加Message
41+
void remMsg(const Message*);
42+
};

0 commit comments

Comments
 (0)