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

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

C++構造函數深度學習

2020-05-23 14:01:03
字體:
來源:轉載
供稿:網友

本文針對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及以上的版本使用,這個方法局限性很大,不過確實很方便。

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


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
黄色精品在线看| 91免费在线视频| 久久天天躁狠狠躁夜夜躁| 国产精品久久二区| 91在线观看免费高清完整版在线观看| 日韩中文有码在线视频| 亚洲国产成人精品久久久国产成人一区| 亚洲男人的天堂在线播放| 国产精品视频久久| 欧美视频国产精品| 欧美亚洲国产另类| 成人中文字幕+乱码+中文字幕| 夜色77av精品影院| 久久免费视频这里只有精品| 欧美日韩色婷婷| 亚洲自拍偷拍在线| 欧美一级视频一区二区| 在线精品国产成人综合| 岛国av在线不卡| 亚洲精品之草原avav久久| 69久久夜色精品国产7777| 97视频人免费观看| 成人免费高清完整版在线观看| 日韩欧美a级成人黄色| 国产成人免费91av在线| www.日韩av.com| 久久久影视精品| 精品久久久久久中文字幕大豆网| 亚洲精品欧美日韩专区| 欧美大码xxxx| 久久99精品久久久久久琪琪| 亚洲最大成人网色| 成人久久一区二区| 日本高清视频精品| 亚洲欧美另类国产| 国产99视频在线观看| 国产精品夜色7777狼人| 久久香蕉频线观| 91久久久久久久久久久久久| 丝袜美腿亚洲一区二区| 亚洲va码欧洲m码| 8x拔播拔播x8国产精品| 97精品视频在线观看| 中文字幕亚洲欧美日韩高清| 亚洲丁香婷深爱综合| 中文字幕国产亚洲| 日本精品久久久久影院| 欧美在线视频免费观看| 国产精选久久久久久| 欧美成人性生活| 欧美肥老妇视频| 国产精品香蕉国产| 成人激情视频在线| 怡红院精品视频| 久久露脸国产精品| 亚洲国产精彩中文乱码av在线播放| 日韩免费在线视频| 97人人模人人爽人人喊中文字| 亚洲黄页视频免费观看| 国产狼人综合免费视频| 久久久www成人免费精品张筱雨| 国产午夜精品全部视频播放| 日韩成人中文电影| 精品久久久久久亚洲精品| 日韩美女免费视频| 久久国产精品网站| 一区二区av在线| 一区二区av在线| 国产精品久久久久久久久久久久| 亚洲一区精品电影| 欧美日韩一区二区精品| 2019精品视频| 欧美与欧洲交xxxx免费观看| 日韩毛片在线观看| 国产成人在线一区| 中文字幕亚洲欧美一区二区三区| 久久福利网址导航| 欧美大尺度激情区在线播放| 国产精品久久久久久久久久99| 精品国产91乱高清在线观看| 欧美一级片一区| 精品无码久久久久久国产| 国产精品久久久久久亚洲调教| 亚洲人av在线影院| 欧美精品videos另类日本| 国产成人精品久久亚洲高清不卡| 国产精品一区久久| 国产精品欧美在线| 中文字幕日韩欧美在线视频| 日韩电影网在线| 日韩av在线不卡| 国产成人在线播放| 亚洲图片制服诱惑| 国产日韩欧美在线观看| 色与欲影视天天看综合网| 色综合天天综合网国产成人网| 欧美激情性做爰免费视频| 国产一区视频在线播放| 亚洲欧美成人精品| 久久国产精彩视频| 欧美精品免费在线| 亚洲伊人久久大香线蕉av| 成人免费淫片视频软件| 亚洲人成77777在线观看网| 国产精品一区二区三区毛片淫片| 91精品视频在线看| 国产在线精品自拍| 欧美xxxx18国产| 97av在线视频免费播放| 久色乳综合思思在线视频| 欧美日韩xxx| 国产精品高潮视频| 日韩精品999| 国产99视频在线观看| 色综合伊人色综合网| 久久高清视频免费| 久久精品2019中文字幕| 色婷婷综合久久久久中文字幕1| 美女视频黄免费的亚洲男人天堂| 国产精品美乳一区二区免费| 久久久电影免费观看完整版| 亚洲天堂av女优| 伊人久久五月天| 日韩中文在线中文网三级| 国产精品美女999| 亚洲aⅴ男人的天堂在线观看| 免费99精品国产自在在线| 久久99精品视频一区97| 欧美日韩中文字幕在线| 国产精品99久久久久久www| 国产丝袜精品第一页| 国产美女高潮久久白浆| 亚洲大胆人体视频| 97avcom| 在线观看不卡av| 亚洲精品一区二三区不卡| 欧美第一页在线| 久热爱精品视频线路一| 欧美中文字幕在线| 国产九九精品视频| 国产亚洲精品久久久优势| 欧美精品videos另类日本| 欧美黄色片在线观看| 日本久久精品视频| 久久97精品久久久久久久不卡| 97在线视频免费看| 亚洲成人av在线播放| 色偷偷偷综合中文字幕;dd| 久久久之久亚州精品露出| 亚洲va欧美va在线观看| 亚洲精品视频在线观看视频| 亲爱的老师9免费观看全集电视剧| 精品福利一区二区| 欧美激情a∨在线视频播放| 中文字幕日韩在线观看| 久久精品国产清自在天天线| 57pao国产成人免费| 日韩在线视频线视频免费网站| 国产成人精品久久二区二区91| 欧美日韩视频在线| 国产精品99久久久久久www| 色一情一乱一区二区| 亚洲欧美国产精品专区久久| 日韩精品免费观看|