C++ Primer (第四版) 13.4 消息处理示例
来源:互联网 发布:mac找回删除的文件 编辑:程序博客网 时间:2024/06/10 09:59
Message类与Folder类设计 示意图
.h
#ifndef __C_MESSAGE__#define __C_MESSAGE__#include <string>#include <set>using namespace std;class CMessage;class Folder{public:Folder(){};//复制控制成员Folder( const Folder& );Folder& operator= ( const Folder& );~Folder();//在指定Message的目录集中增加/删除指定Messagevoid save( CMessage & );void remove( CMessage & );//在该目录的消息集中增加/删除指定的Messagevoid addMsg( CMessage * );void remMsg( CMessage * );private:std::set<CMessage*> message;//该目录中的消息集//复制控制成员所使用的实用函数://将目录加到形参所指的消息集中void put_Fldr_in_Messages( const std::set<CMessage*>& );//从目录所指的所有消息中删除该目录void remove_Fldr_from_Messages();};class CMessage{public://folders自动初始化为空集CMessage( const std::string &str = "" ) : contents(str) { }//复制控制成员CMessage( const CMessage& );CMessage& operator= ( const CMessage& );~CMessage(void);//在指定的Folder的消息集中增加/删除该消息void save( Folder& );void remove( Folder& );//在包含该消息的目录集中增加/删除指定Foldervoid addFldr( Folder* );void remFldr( Folder* ); private:std::string contents;//实际消息文本std::set<Folder*> folders;//包含该消息的目录//复制构造函数、赋值、析构函数所使用的实用函数://将消息加到形参所指定的目录集中void put_Msg_in_Folders( const std::set<Folder*>& );//从消息所在的所有目录中删除该消息void remove_Msg_from_Folders();};#endif //__C_MESSAGE__
.cpp
#include "stdafx.h"#include "Message.h"Folder::Folder( const Folder& f ) : message(f.message){//将该目录加到f所指向的每个消息中put_Fldr_in_Messages(message);}Folder& Folder::operator=( const Folder& rhs ){if( &rhs != this ){remove_Fldr_from_Messages();//更新现有消息message = rhs.message;//从rhs复制消息指针集put_Fldr_in_Messages(rhs.message);//将该目录加到rhs中的每个消息中}return *this;}Folder::~Folder(){remove_Fldr_from_Messages();}void Folder::save( CMessage &msg ){addMsg( &msg );msg.addFldr(this);//更新现有消息}void Folder::remove( CMessage &msg ){remMsg( &msg );msg.remFldr(this);//更新现有消息}void Folder::addMsg( CMessage *msg ){message.insert( msg );}void Folder::remMsg( CMessage *msg ){message.erase( msg );}void Folder::put_Fldr_in_Messages( const std::set<CMessage*> &rhs ){for ( std::set<CMessage*>::const_iterator beg = rhs.begin(); beg != rhs.end(); ++beg ){(*beg)->addFldr(this);//*beg指向一个消息}}void Folder::remove_Fldr_from_Messages(){for ( std::set<CMessage*>::const_iterator beg = message.begin(); beg != message.end(); ++beg ){(*beg)->remFldr(this);//*beg指向一个消息}}CMessage::CMessage( const CMessage &m ) :contents(m.contents),folders(m.folders){put_Msg_in_Folders( folders );//将该消息加到指向m的每个目录中}CMessage& CMessage::operator= ( const CMessage &rhs ){if( &rhs != this ){remove_Msg_from_Folders();contents = rhs.contents;//从rhs复制消息内容folders = rhs.folders;//从rhs复制目录指针集put_Msg_in_Folders( rhs.folders );//将该消息加到rhs中的每个目录中}return *this;} CMessage::~CMessage( void ){remove_Msg_from_Folders();}void CMessage::save( Folder &fldr ){addFldr( &fldr );fldr.addMsg( this );}void CMessage::remove( Folder &fldr ){remFldr( &fldr );fldr.remMsg( this ); }void CMessage::addFldr( Folder *fldr ){folders.insert( fldr );}void CMessage::remFldr( Folder *fldr ){folders.erase( fldr );}//将该消息加到rhs所指向的每个目录集中void CMessage::put_Msg_in_Folders( const std::set<Folder*> &rhs ){for ( std::set<Folder *>::const_iterator beg = rhs.begin(); beg != rhs.end(); beg++ ){(*beg)->addMsg( this );}}//从对应的目录中删除该消息void CMessage::remove_Msg_from_Folders(){for ( std::set<Folder *>::const_iterator beg = folders.begin(); beg != folders.end(); beg++ ){(*beg)->remMsg( this );}}
0 0
- C++ Primer (第四版) 13.4 消息处理示例
- C++primer 消息处理示例
- c++primer 复制控制-消息处理示例
- 立此存照(20)[C++]C++ Primer(4th)消息处理示例
- C++ Primer消息处理示例
- C++ Primer 消息处理示例
- C++ primer 13.4消息处理
- c++ primer 消息处理示例+课后习题完成
- c++primer(第四版)习题10.18
- C++Primer 第四版的代码问题
- C++Primer (第四版) 重点笔记
- 《c++primer(第四版)》习题8.6
- 《c++primer(第四版)》习题8.7
- 《c++primer(第四版)》习题8.9
- 《c++primer(第四版)》习题8.16
- 《c++primer(第四版)》习题11.9
- 《c++primer(第四版)》习题11.10
- 《c++primer(第四版)》习题11.14
- Android 5.0:ART 取代 Dalvik ?
- asp.net网站管理工具 工具已超时问题如何解决!求高手指点!
- 【Adobe】请卸载并重新安装该产品
- 《AutoCAD .NET开发指南2012版》翻译整理已完成,欢迎大家下载!
- Java:获取项目路径
- C++ Primer (第四版) 13.4 消息处理示例
- Encyclopaedia Britannica Ultimate 2014电子版下载|大不列颠百科全书
- Ado访问数据库
- No architectures to compile for (ARCHS=arm6 arm7, VALID_ARCHS=armv7)
- 九度oj 题目1022:游船出租
- HDU 动态规划(46道题目)倾情奉献~ 【只提供思路与状态转移方程】
- 字体大小,行高,高度
- uva——10054——项链
- 《OpenGL超级宝典4》学习笔记——第三章(一)