邮件管理类
资源管理是类需要进行拷贝控制的重要原因,但不是唯一原因,有时候类需要拷贝控制来进行簿记工作。
比如这个邮件管理类:当进行拷贝时,我们不仅需要拷贝原对象的数据成员,还需要把拷贝出来的对象添加到相应的Folder中。
这里,编程的时候遇到一个问题,就是相互引用问题,解决办法如下:一般的做法是:两个类的头文档之中,选一个包含另一个类的头文档,但另一个头文档中只能采用class ;的申明形式,而在实现文档中(.cpp)中包含头文档
Message.h
#pragma once
#include<set>
#include<string>
#include"Folder.h"
using namespace std;
class Message
{
public:
friend class Folder;
//构造函数 set被默认初始化
explicit Message(const string& s = "") :contents(s) {
}
void save(Folder&);
void remove(Folder&);
//拷贝构造函数
Message(const Message&);
//拷贝赋值运算符
Message& operator=(const Message&);
//析构函数
~Message();
void modify(const string&);
private:
string contents; //message内容
set<Folder*> folder; //包含在哪些folder中
void addto_all_folder();//公共的private工具
void removeto_all_folder();//公共的private工具
};
Message.cpp
#include "Message.h"
using namespace std;
void Message::save(Folder& f)
{
folder.insert(&f);
f.addMsg(this);
}
void Message::remove(Folder& f)
{
folder