亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 編程 > C++ > 正文

[C++ primer] 第13章_拷貝、賦值、銷毀 知識總結+代碼實現

2019-11-08 02:49:01
字體:
來源:轉載
供稿:網友

13.1 拷貝、賦值與銷毀

13.1.1拷貝構造函數

拷貝構造函數條件: 1. 第一個參數為自身類型的引用 2. 任何額外參數都有默認值

對于類類型的成員,會使用其拷貝構造函數來拷貝,內置類型則直接拷貝。

#include <bits/stdc++.h>using namespace std;int main(){ return 0;}class Sales_data {public: //拷貝析構函數 Sales_data(const Sales_data &);PRivate: string bookNo; int units_sold = 0; double revenue;};Sales_data::Sales_data(const Sales_data &orig): bookNo(orig.bookNo), units_sold(orig.units_sold), revenue(orig.revenue){ }

拷貝初始化使用: 1. =號賦值 2. 非引用類型參數傳遞 3. 返回一個非引用類型對象 4. 花括號列表初始化數組、聚合類 5. 類類型對其分配的對象初始化。push 、insert

explicit構造函數:其只能用于直接初始化,其他情況不能隱式的使用。

拷貝賦值運算符: 會將右側值通過成員類型的拷貝賦值運算符對成員進行賦值,然后返回左側運算對象的引用。

Sales_data& Sales_data::Operator=(const Sales_data &rhs) { bookNo = rhs.bookNo; units_sold = rhs.units_sold; revenue = rhs.revenue; return *this;}

13.2 拷貝控制和資源管理

一但一個類需要析構函數,那么它幾乎肯定也需要一個拷貝構造函數和一個拷貝賦值運算符。

為定義這些函數,我們

#include <bits/stdc++.h>using namespace std;class Folder;class Message { friend void swap(Message& ,Message&); friend class Folder;public: explicit Message(const string &str = ""): contents(str){} Message(const Message&); Message& operator=(const Message&); ~Message(); void save(Folder &f); void remove(Folder &f); void debug_print();private: string contents; set<Folder*> folders; void add_to_Folders(const Message&); void remove_from_Folders(); void addFldr(Folder *f){folders.insert(f);} void remFldr(Folder *f){folders.erase(f);}};void swap(Message&,Message&);class Folder { friend void swap(Message&,Message&); friend class Message;public: ~Folder(); Folder(const Folder&); Folder&operator=(const Folder&);// Folder(Folder&&);// Folder&operator=(Folder&&); Folder()= default; void save(Message&); void remove(Message&); void debug_print();private: set<Message*> msgs; void add_to_Messages(const Folder&); void remove_from_Msgs(); void addMsg(Message *m){msgs.insert(m);} void remMsg(Message *m){msgs.erase(m);}// void move_Messages(Folder*);};/*message -> floder*/void Folder::add_to_Messages(const Folder &f) { for(auto msg : f.msgs) msg->addFldr(this);}/*all msg - this folder*/void Folder::remove_from_Msgs() { while(!msgs.empty()) { (*msgs.begin())->remove(*this); }}Folder::Folder(const Folder &m) : msgs(m.msgs){ add_to_Messages(m);}//拷貝賦值運算符Folder& Folder::operator=(const Folder &rhs) { remove_from_Msgs(); msgs = rhs.msgs; add_to_Messages(rhs);}//析構函數Folder::~Folder() { remove_from_Msgs();}/*fold -> message , message -> fold*/void Folder::save(Message &m) { msgs.insert(&m); m.addFldr(this);}/*fold - message ,message - fold*/void Folder::remove(Message &m) { msgs.erase(&m); m.remFldr(this);}void Folder::debug_print() { cerr<<"there are "<<msgs.size()<<"message in this folder."<<endl;}/*************************************//*message->folder, folder->message*/void Message::save(Folder &f) { folders.insert(&f); f.addMsg(this);}/*message - folder , folder - message*/void Message::remove(Folder &f) { folders.erase(&f); f.remMsg(this);}/*all folder -> message*/void Message::add_to_Folders(const Message &m) { for(auto f:m.folders) { f->addMsg(this); }}//remove this Message/*all folder - message*/void Message::remove_from_Folders() { for(auto f : folders) f->remMsg(this);}Message::Message(const Message &m): contents(m.contents),folders(m.folders){ /*把this添加到對應folder中*/ add_to_Folders(m);}//從所有的message刪除Message::~Message() { remove_from_Folders();}Message& Message::operator=(const Message &rhs){// delete *this remove_from_Folders(); contents = rhs.contents; folders = rhs.folders; /*add this to folders*/ add_to_Folders(rhs); return *this;}void Message::debug_print() { cerr << "Message/t"<<contents<<endl; cerr<<"Appers in" << folders.size()<<" Folders"<<endl;}void swap(Message &lhs, Message &rhs){ 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() { string s1("contents1"); string s2("contents2"); string s3("contents3"); string s4("contents4"); string s5("contents5"); string s6("contents6"); Message m1(s1); Message m2(s2); Message m3(s3); Message m4(s4); Message m5(s5); Message m6(s6); Folder f1; Folder f2; m1.save(f1); m3.save(f1); m5.save(f1);// m1.debug_print();// m2.debug_print();// f1.debug_print();/*m1,m3,m5*/ Message c1(m1); Message c2(m3);// m1.debug_print();// f2.debug_print();// m1,m3,m5,c1,c2// f1.debug_print(); m1 = m5; swap(m1,m4);//m5,m3,m5,c1,c2 m1.debug_print(); f1.debug_print(); return 0;}

動態內存管理類


上一篇:C++學習筆記

下一篇:C++面試題(七)

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表

圖片精選

亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
亚洲一区二区三| 日韩欧美成人网| 成人淫片在线看| 日韩福利在线播放| 97精品视频在线播放| 亚洲丝袜在线视频| 亚洲女人天堂视频| 日韩高清不卡av| 日韩亚洲综合在线| 亚洲精品国偷自产在线99热| 日韩电影在线观看永久视频免费网站| 欧美大学生性色视频| 国产精品视频播放| 精品国产精品三级精品av网址| 色综合久久久888| 亚洲精品自拍视频| 日本高清+成人网在线观看| 亚洲欧洲午夜一线一品| 成人美女免费网站视频| 亚洲国产欧美精品| 国内揄拍国内精品少妇国语| 日韩欧美在线第一页| 亚洲亚裔videos黑人hd| 最近的2019中文字幕免费一页| 亚洲精品国产精品自产a区红杏吧| 日韩网站免费观看高清| 久久久在线视频| 在线精品高清中文字幕| 国产亚洲视频在线观看| 夜色77av精品影院| 91九色单男在线观看| 日本精品在线视频| 伊人伊成久久人综合网站| 日韩在线观看免费av| 日韩美女视频中文字幕| 日韩av大片在线| 国产成人av在线| 日韩欧美在线网址| 国内精品一区二区三区| 日韩在线观看免费全| 97国产精品视频人人做人人爱| 精品久久久999| 国产大片精品免费永久看nba| 成人免费视频在线观看超级碰| 久久精品美女视频网站| 欧美午夜影院在线视频| 国产免费一区视频观看免费| 国产美女扒开尿口久久久| 日韩精品中文字幕在线播放| 欧美亚洲国产日韩2020| 日韩欧美成人区| 亚洲最大av在线| 国产一区二区精品丝袜| 欧美激情一区二区三区成人| 欧美日韩性视频在线| 欧美精品一本久久男人的天堂| 欧美性猛交xxxx黑人| 欧美日韩一区二区精品| 日韩欧美国产免费播放| 国内自拍欧美激情| 国产久一一精品| 色婷婷**av毛片一区| 九九热精品视频在线播放| 亚洲国产精品久久久| 亚洲精品aⅴ中文字幕乱码| www.国产一区| 国产精品成人一区二区| 国产成人精彩在线视频九色| 97久久伊人激情网| 国产丝袜视频一区| 欧美视频13p| 欧美久久精品午夜青青大伊人| 在线观看国产精品淫| 午夜精品久久久99热福利| 欧美国产精品日韩| 亚洲欧美制服丝袜| 精品久久久国产| 91免费版网站入口| 色综合91久久精品中文字幕| 亚洲欧美综合区自拍另类| 久久久久久久久久国产精品| 97视频免费看| 日本高清久久天堂| 亚洲激情在线观看视频免费| 自拍偷拍亚洲一区| 97视频在线观看亚洲| 成人亚洲综合色就1024| 中文字幕自拍vr一区二区三区| 亚洲国产精品电影在线观看| 亚洲一区二区三区乱码aⅴ蜜桃女| 色999日韩欧美国产| 亚洲欧美另类国产| 欧美一区二区大胆人体摄影专业网站| 亚洲精品乱码久久久久久金桔影视| 亚洲欧美中文字幕在线一区| 国产精品视频午夜| 成人免费在线视频网址| 中文字幕精品视频| 日韩欧美在线免费| 午夜精品久久久久久久男人的天堂| 日韩精品电影网| 69精品小视频| 精品国产成人在线| 最近2019年好看中文字幕视频| 亚洲国产精彩中文乱码av在线播放| 国模私拍视频一区| 亚洲第一视频在线观看| 精品成人av一区| 色综合久久悠悠| 成人久久一区二区三区| 日韩中文字幕在线看| 亚洲视频网站在线观看| 成人精品aaaa网站| 91在线视频一区| 国产福利精品视频| 国产亚洲欧美另类中文| 国产成人精品综合久久久| 欧美www视频在线观看| 亚洲国产精品资源| 久久91精品国产| 成人午夜高潮视频| 国产美女扒开尿口久久久| 中国人与牲禽动交精品| 国产精品第100页| 日韩在线观看免费av| 国产成人中文字幕| 欧美视频国产精品| 亚洲性视频网站| 成人性生交大片免费看视频直播| 欧美插天视频在线播放| 久久免费少妇高潮久久精品99| 欧美三级免费观看| 欧美乱人伦中文字幕在线| 国产精品视频xxx| 日韩在线欧美在线国产在线| 国产一区二区久久精品| 亚洲综合中文字幕在线| 久久视频这里只有精品| 日本欧美爱爱爱| 91影视免费在线观看| 97欧美精品一区二区三区| 亚洲白虎美女被爆操| 国产精品高潮粉嫩av| 这里只有精品久久| 欧美日韩免费在线观看| 亚洲电影免费观看高清完整版在线观看| 久久黄色av网站| 久久精品91久久香蕉加勒比| 91精品视频在线免费观看| 久久久av免费| 免费av在线一区| 国产一区二区三区久久精品| 91在线观看免费高清| 97在线日本国产| 91精品国产综合久久久久久蜜臀| 久久精品国产一区二区电影| 色偷偷88888欧美精品久久久| 中文字幕无线精品亚洲乱码一区| 欧美精品久久久久| 欧美一级淫片aaaaaaa视频| 国产精品吹潮在线观看| 亚洲伊人久久大香线蕉av| 精品呦交小u女在线| 色综合亚洲精品激情狠狠|