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

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

C++構造函數深度學習

2020-01-26 14:28:35
字體:
來源:轉載
供稿:網友

本文針對C++構造函數進行深度探究,供大家參考,具體內容如下

1、引子: 
以下代碼中的輸出語句輸出0嗎,為什么?

struct Test{  int _a;  Test(int a) : _a(a) {}  Test()  {    Test(0);  }};Test obj;cout << obj._a << endl; 

輸出為:-858993460

2、剖析
上面代碼的輸出為一個垃圾值,也就是說obj調用構造函數并沒有對成員進行初始化工作,雖然默認無參構造Test()內部調用了Test(int a),但從結果看,初始化工作并不成功。這是為什么呢? 

在執行構造函數時,Test()并不會調用"this"對象(即obj對象)的Test::Test(int a),而是會用Test::Test(int a)來創建一個新的臨時實例對象,然后當這條語句執行完后,這個新的臨時對象馬上就會被銷毀。這樣一來,"this"對象就沒有被初始化,成員_a就是垃圾值,以后使用"this"對象就有可能產生一些問題。

3.重點:構造函數互相調用
 分析完這個題目之后,我們會想到另一個問題。也是我們今天重點關注的問題:

class Test{   int _a;   int _b;   int _c; public:  Test(int a, int b) : _a(a), _b(b),_c(0) {}   Test(int a, int b, int c); }; 

如果我們C++類中有兩個構造函數,分別為Test(int a, int b)和Test(int a, int b, int c)。如果我們的構造函數Test(int a, int b, int c)要完成所有成員(a,b,c)的賦值初始化工作,可以這樣寫:

Test::Test(int a, int b, int c)    : _a(a)  , _b(b)  , _c(c){ } 

但是,這樣寫又重復了構造函數Test(int a, int b)的工作,類成員少的情況下還好,如果成員非常多,重復寫的話代碼量過大,而且代碼可讀性降低了。然而我們可以看到構造函數Test(int a, int b)已經完成了成員a和成員b的賦值初始化工作,為了減少代碼量,就想著讓3個參數的構造函數調用2個參數的構造函數,然后在執行一些自己的代碼,這就如同派生類先調用基類的同名函數,再執行自己特有的代碼。但是這種機制如何實現呢? 

之前我們得出過結論:構造函數調用另一個構造函數并不能完成當前對象的初始化工作,只是初始化了臨時對象。下面我們就進入本文的核心問題:如何在構造函數中調用本類的另一個構造函數來初始化當前對象?

方法一:使用placement new技術,在3個參數中顯式調用2個參數的構造函數。
3參數構造函數可以這樣實現:

Test::Test(int a, int b, int c)  {   new (this) Test(a, b);   ... } 

構造函數分為2個執行階段:一是在初始化列表的初始化階段,二是在構造函數體內的賦值階段。上述方法是在第二個階段調用2個參數的構造函數。 

placement new是operator new的一個重載版本,只是我們很少用到它。如果你想在已經分配的內存中創建一個對象,使用new是不行的。也就是說placement new允許你在一個已經分配好的內存中(?;蚨阎校嬙煲粋€新的對象。原型中void*p實際上就是指向一個已經分配好的內存緩沖區的的首地址。placement new技術的形式是 new(void *p) Type(...),表示在p所指的內存區域調用Type構造函數,該過程沒有內存請求。 

這個方法本質就是在對象地址處,調用2個參數的構造函數重新生成一個新的對象然后覆蓋該對象。這個實現方法有投機取巧的嫌疑。 

方法二:使用C++11新特性――委托構造函數(Delegating constructors)??梢栽跇嬙旌瘮党跏蓟斜碇苯诱{用,類似于調用基類構造函數。

Test::Test(int a, int b, int c) : Test(a, b) {   ... } 

上述說了構造函數有2個執行階段,該方法是在第一個階段進行的,更加方便。但是注意不能在Test(a, b)后面在接_c(c)了,因為調用2個參數的構造函數之后,就相當于該對象已經初始化完成了,不能在初始化列表放入其他成員的初始化形式。只能放在構造函數體中的賦值階段。該方法目前只能用在VS2013中。 

這個方法利用了C++11標準中的新特性――委托構造函數(Delegating constructors)。目前只能再VS2013及以上的版本使用,這個方法局限性很大,不過確實很方便。

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持武林網。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
98午夜经典影视| 久久伊人精品一区二区三区| 国产精品日韩精品| 51色欧美片视频在线观看| 国产91精品久久久久久久| 久久久免费精品| 国产精品麻豆va在线播放| 久久影视免费观看| xvideos亚洲人网站| 91精品国产自产在线| 久久久久久久久久久久久久久久久久av| 久久久久久亚洲精品不卡| 日韩成人在线播放| 5566成人精品视频免费| 8050国产精品久久久久久| 亚洲iv一区二区三区| 日本欧美国产在线| 日韩一级裸体免费视频| 美女黄色丝袜一区| 成人高清视频观看www| 亚洲欧美一区二区精品久久久| 久久久亚洲欧洲日产国码aⅴ| 92看片淫黄大片欧美看国产片| 国产精品免费一区二区三区都可以| 亲爱的老师9免费观看全集电视剧| 亚洲成人av在线| 午夜精品国产精品大乳美女| 亚洲天堂av在线免费观看| 在线观看日韩专区| 精品国产乱码久久久久久婷婷| 日韩av网站导航| 精品亚洲一区二区三区在线播放| 久久久av一区| 亚洲欧美另类人妖| 亚洲成色www8888| 日韩欧美成人精品| 2020欧美日韩在线视频| 久99九色视频在线观看| 久久久国产一区二区| 久久久久北条麻妃免费看| 92版电视剧仙鹤神针在线观看| 国产欧美一区二区三区在线| 亚洲性视频网址| 欧美成年人视频网站| 欧美色欧美亚洲高清在线视频| 亚洲系列中文字幕| 国产精品第七十二页| 亚洲a级在线播放观看| 91亚洲国产精品| 亚洲天堂男人的天堂| 日韩精品在线第一页| 欧美日韩福利视频| 国产日韩中文字幕| 欧美丝袜美女中出在线| 欧美日韩在线一区| 久热99视频在线观看| 亚洲国产精品久久久久久| 亚洲精品v天堂中文字幕| 久久视频免费在线播放| 国产99久久精品一区二区 夜夜躁日日躁| 成人激情视频小说免费下载| 国产欧美精品日韩| 91禁外国网站| 日本高清久久天堂| 久久伊人免费视频| 日韩中文在线中文网在线观看| 日日噜噜噜夜夜爽亚洲精品| 欧美高清视频在线播放| 97精品国产97久久久久久| 亚洲男人天堂手机在线| 尤物精品国产第一福利三区| 91成人在线播放| 欧美亚洲另类视频| 国产精品电影网| 亚洲韩国日本中文字幕| 国产精品手机播放| 国产日韩欧美夫妻视频在线观看| 精品国产一区二区三区久久狼5月| 中文字幕免费国产精品| 久久精品欧美视频| 欧美国产日韩视频| 国产精品爽爽ⅴa在线观看| 日韩美女在线看| 97视频国产在线| 亚洲图片欧美日产| 久久人人爽人人| 中文字幕在线观看日韩| 久久久久久久一| 日韩美女视频在线观看| 精品国产乱码久久久久久婷婷| 成人免费高清完整版在线观看| 欧美精品国产精品日韩精品| 成人性教育视频在线观看| 成人精品一区二区三区电影免费| 亚洲精品一区中文| 日本欧美国产在线| 亚洲aaa激情| 国产91精品视频在线观看| 国产主播在线一区| 亚洲电影av在线| 久久色在线播放| 日韩电影免费观看中文字幕| 国产精品久久久久久久久| 亚洲欧美在线免费观看| 欧美色图在线视频| 欧美成人精品在线| 久久韩剧网电视剧| 欧美一级电影免费在线观看| 精品亚洲一区二区三区| 日韩一区二区三区国产| 欧美美女操人视频| 91久久久久久久久久久| 另类图片亚洲另类| 亚洲欧洲日韩国产| 久久精品视频99| 欧美一区二区三区……| 久久久精品中文字幕| 成人激情视频小说免费下载| 成人在线视频网| 欧美日韩加勒比精品一区| 亚洲精品国产suv| 午夜精品美女自拍福到在线| 日韩美女视频免费在线观看| 国产精品视频白浆免费视频| 国产精品一区二区三区毛片淫片| 精品视频在线导航| 国产美女精品视频免费观看| 亚洲一区亚洲二区| 欧美一级高清免费| 亚洲精品视频网上网址在线观看| 一本色道久久88精品综合| 久久视频国产精品免费视频在线| 91国内精品久久| 国产欧美精品日韩| 亚洲成人中文字幕| 国产91精品视频在线观看| 欧美国产第二页| 国产精品第一区| 亚洲高清免费观看高清完整版| 色一情一乱一区二区| 久久久亚洲精品视频| 欧美日韩国产123| 久久国产精品久久久久久| 中文字幕日韩电影| 成人午夜两性视频| 欧美巨猛xxxx猛交黑人97人| 日韩亚洲成人av在线| 2019中文字幕在线| 九九精品在线视频| 午夜精品蜜臀一区二区三区免费| 欧美午夜精品久久久久久人妖| 欧洲一区二区视频| 成人h视频在线观看播放| 国产精品视频网址| 91色在线观看| 国产成人avxxxxx在线看| 国产欧美 在线欧美| 久久全球大尺度高清视频| 亚洲欧美第一页| 久久久精品网站| 日韩女优人人人人射在线视频| 欧美日韩激情小视频| 国产精品国产三级国产aⅴ浪潮| 亚洲欧洲av一区二区|