程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> C++ >> C++入門知識 >> 第13章 復制控制(5)

第13章 復制控制(5)

編輯:C++入門知識

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.2cto.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的專欄

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved