当前位置:编程学习 > C/C++ >>

第13章 复制控制(5)

1. Message类

class Message{ 
public: 
    Message(const string &str = ""):contents(str){} 
    Message(const Message&); 
    Message& operator=(const Message&); 
    ~Message(); 
    void save(Folder&); 
    void remove(Folder&); 
private: 
    string contents; 
    set<Folder*> folders; 
    void put_Msg_in_Folders(const set<Folder*>&); 
    void remove_Msg_from_Folders(); 
}; 
2. Message类的复制控制

Message::Message(const Message &msg):contents(msg.contents),folders(msg.folders) 

    put_Msg_in_Folders(folders); 

编写自己的复制构造函数时,必须显式复制需要复制的任意成员。显式定义的复制构造函数不会进行任何自动复制。
像其他任何构造函数一样,如果没有初始化某个类成员,则那个成员用该成员的默认构造函数初始化。复制构造函数中的默认初始化不会使用成员的复制构造函数。
3. put_Msg_in_Folder成员

void Message::put_Msg_in_Folders(const set<Folder*>& folders) 

    for(set<Folder*>::const_iterator beg = folders.begin();beg!=folders.end();++beg) 
    { 
        (*beg)->addMsg(this); 
    } 

4. Message赋值操作符 www.zzzyk.com

Message& Message::operator=(const Message& msg) 

    if(&msg != this) 
    { 
        remove_Msg_from_Folders(); 
        contents = msg.contents; 
        folders = msg.folders; 
        put_Msg_in_Folders(msg.folders); 
    } 

即使对象赋值给自己,赋值操作符的正确工作也非常重要。保证这个行为的通用方式是显式检查对自身的赋值。
5. remove_Msg_from_Folders成员

void Message::remove_Msg_from_Folders() 

    for(set<Folder*>::const_iterator beg=folders.begin();beg!=folders.end();++beg) 
    { 
        (*beg)->removeMsg(this); 
    } 

6. Message的析构函数

Message::~Message() 

    remove_Msg_from_Folders(); 

 

摘自 xufei96的专栏

补充:软件开发 , C++ ,
CopyRight © 2022 站长资源库 编程知识问答 zzzyk.com All Rights Reserved
部分文章来自网络,