第十三章 拷贝控制实例
来源:互联网 发布:mac待机耗电很快 编辑:程序博客网 时间:2024/06/07 13:06
设计一个名为Message和一个Folder的类。
体现拷贝构造函数,拷贝赋值运算符的作用。
注意:
1.两个类在实现过程中需要相互调用时,头文件的包含。
2.工具函数的使用。
//in _Folder.h#ifndef FOLDER_H#define FOLDER_H#include"_Message.h" //*****************It's necessary************#include<iostream>#include<set>using namespace std;class Message; //****************It's necessary*******************class Folder //define class Folder{ friend class Message;public: Folder() //default constructor { //empty body } void addMsg(Message *m); //insert a message into this folder void rmMsg(Message *m); //remove a message from this folder void display() const; //show all messages contented in this folderprivate: set<Message *> messages;};#endif // FOLDER_H
//in _Folder.cpp#include"_Folder.h"#include<iostream>using namespace std;void Folder::addMsg(Message *m) //insert a message into this folder{ messages.insert(m);}void Folder::rmMsg(Message *m) //remove a message from this folder{ messages.erase(m);}void Folder::display() const //show all messages contented in this folder{ cout << "these message are contented in this folder:\n"; for (auto &m : messages) m->display();}
//in _Message.h#ifndef MESSAGE_H#define MESSAGE_H#include"_Folder.h" //******************It's necessary***************#include<iostream>#include<string>#include<set>using namespace std;class Folder; //************It's necessary**********class Message{ friend class Folder;public: Message(const string &s = string()) :contents(s) { //empty body }; Message(const Message &m) //copy constructor :contents(m.contents), folder(m.folder) { add_to_folder(m); } Message &operator=(const Message &m); //overload '=' ~Message(); //destructor void save(Folder &f); //add this message to a folder void remove(Folder &f); //remove this message from a folder void display() const;private: string contents; set<Folder *> folder; void add_to_folder(const Message &m); //utility function void remove_from_Folder(); //utility function};#endif // MESSAGE_H
//in _Message.cpp#include"_Message.h"#include<iostream>using namespace std;void Message::save(Folder &f) //add this message to a folder{ folder.insert(&f); f.addMsg(this);}void Message::remove(Folder &f) //remove this message from a folder{ f.rmMsg(this); folder.erase(&f);}void Message::display() const{ cout << contents << endl;}void Message::add_to_folder(const Message &m){ for (auto f : m.folder) f->addMsg(this);}void Message::remove_from_Folder(){ for (auto f : folder) f->rmMsg(this);}Message &Message::operator=(const Message &m){ remove_from_Folder(); contents = m.contents; folder = m.folder; add_to_folder(m);}Message::~Message(){ remove_from_Folder();}
0 0
- 第十三章 拷贝控制实例
- 第十三章 拷贝控制
- 第十三章 拷贝控制
- C++ Primer : 第十三章 : 拷贝控制示例
- C++ Primer : 第十三章 : 拷贝控制之对象移动
- C++primer第五版笔记-第十三章拷贝控制
- 《C++ Primer》读书笔记——第十三章_拷贝控制
- c++primer第十三章拷贝控制小结-13
- c++ primer 概念总结第十三章 拷贝控制
- C++学习笔记【第三部分第十三章:拷贝控制】
- C++ Primer : 第十三章 : 拷贝控制之拷贝控制和资源管理
- C++ Primer : 第十三章 : 拷贝控制之拷贝、赋值与销毁
- c++ primer(第五版)笔记 第十三章(1) 拷贝控制
- c++ primer(第五版)笔记 第十三章(2) 拷贝控制
- c++ primer(第五版)笔记 第十三章(3) 拷贝控制
- 《C++primer(第五版)》学习之路-第十三章:拷贝控制
- c++primer(第五版) 第十三章 拷贝控制习题答案
- 读书笔记《C++ Primer》第五版——第十三章 拷贝控制
- 快速掌握C++要点(待续)
- 封装,多态,继承
- 全解HTML 5在移动Web应用的优劣势
- Cryengine渲染引擎剖析
- Android内存性能优化
- 第十三章 拷贝控制实例
- 我的Qt笔记(四)
- 如何调用已有的SO文件来生成供Android使用的SO文件
- Unity3D基础知识方法重载
- 总结在js中插入HTML的方法
- 大话设计模式(二)
- JDBC Insert语句插入Oracle数据库返回数据主键
- 调用OCX控件时的声明和实现
- 如何实现在文章底部加入“本文链接地址”DEDE技巧