C++ - 类的自定义构造器 非动态分配内存情况 示例
来源:互联网 发布:js 模拟dos 编辑:程序博客网 时间:2024/06/06 18:57
类的自定义构造器 非动态分配内存情况 示例
本文地址: http://blog.csdn.net/caroline_wendy/article/details/14665719
除了动态分配内存时, 需要自定义构成器(析构器, 复制构造器, 复制-赋值构造器);
在一些特殊情况下, 也需要自定义构造器, 如在多对多的情况的.
例如: 一个信息可以放在多个文件夹下备份, 一个文件夹又可以包含多个信息;
则信息包含string类型的数据, 和文件夹类型地址的集合; 同理文件夹包含string类型的名字, 和信息类型的地址的集合;
注意: 自赋值时, 应该先删除地址, 再添加地址, 防止为空;
代码如下:
/* * cppprimer.cpp * * Created on: 2013.11.7 * Author: Caroline */#include <iostream>class Message;class Folder {public:void addMsg(Message*);void remMsg(Message*);};class Message {friend class Folder;public:explicit Message (const std::string &str = "" ) : contents(str) {}Message (const Message&);Message& operator= (const Message&);~Message();void save (Folder&);void remove (Folder&);private:std::string contents;std::set<Folder*> folders; //folder类型的指针void add_to_Folders (const Message&); //把message添加至所有foldervoid remove_from_Folders();};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_from_Folders(){for (auto f : folders) //删除私有成员变量folders集合的Messagef->remMsg(this);}Message::Message(const Message& m) :contents (m.contents), folders (m.folders){add_to_Folders (m);}Message::~Message(){remove_from_Folders ();}Message& Message::operator= (const Message &rhs){remove_from_Folders();contents = rhs.contents;folders = rhs.folders;add_to_Folders(rhs);return *this;return *this;}void 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);}int main (void) {return 0;}
- C++ - 类的自定义构造器 非动态分配内存情况 示例
- C---动态分配的程序示例
- C语言的动态分配内存
- 动态分配内存的对象必须提供自定义的复制构造函数
- Effective C++(十一):为需要动态分配内存的类声明一个复制构造函数和一个赋值操作符
- 也谈C/C++的内存动态分配
- C语言动态分配内存的方法
- Python list动态分配内存示例
- C动态分配内存
- 【c++】C++ 动态分配内存
- C中动态分配内存
- C语言动态分配内存
- C动态分配内存
- C语言动态分配内存
- C语言--动态分配内存
- C动态分配内存
- 为需要动态分配内存的类声明一个拷贝构造函数和一个赋值操作符
- 为需要动态分配内存的类声明一个拷贝构造函数和一个赋值操作符
- 折半查找的递归和非递归实现(C++)
- android中2D绘图小技巧
- linux的常用命令集锦
- [ACM - 数论]最简单的计算机
- 数据挖掘,机器学习等方面书籍推荐
- C++ - 类的自定义构造器 非动态分配内存情况 示例
- Python中if __name__ == '__main__'的作用
- NOIP2013 Day1第二题 POJ2299
- POJ1753(枚举+位运算)
- Oracle中add_months()函数的用法
- 筛法求素数
- Linux下PCI设备驱动程序开发
- Java 对象在堆中的内存结构
- linux编写驱动常使用的头文件