成人午夜视频全免费观看高清-秋霞福利视频一区二区三区-国产精品久久久久电影小说-亚洲不卡区三一区三区一区

如何進(jìn)行C++拷貝構(gòu)造函數(shù)深入分析以及重寫(xiě)operator-創(chuàng)新互聯(lián)

這篇文章將為大家詳細(xì)講解有關(guān)如何進(jìn)行C++拷貝構(gòu)造函數(shù)深入分析以及重寫(xiě)operator ,文章內(nèi)容質(zhì)量較高,因此小編分享給大家做個(gè)參考,希望大家閱讀完這篇文章后對(duì)相關(guān)知識(shí)有一定的了解。

創(chuàng)新互聯(lián)是一家集網(wǎng)站建設(shè),興文企業(yè)網(wǎng)站建設(shè),興文品牌網(wǎng)站建設(shè),網(wǎng)站定制,興文網(wǎng)站建設(shè)報(bào)價(jià),網(wǎng)絡(luò)營(yíng)銷(xiāo),網(wǎng)絡(luò)優(yōu)化,興文網(wǎng)站推廣為一體的創(chuàng)新建站企業(yè),幫助傳統(tǒng)企業(yè)提升企業(yè)形象加強(qiáng)企業(yè)競(jìng)爭(zhēng)力。可充分滿(mǎn)足這一群體相比中小企業(yè)更為豐富、高端、多元的互聯(lián)網(wǎng)需求。同時(shí)我們時(shí)刻保持專(zhuān)業(yè)、時(shí)尚、前沿,時(shí)刻以成就客戶(hù)成長(zhǎng)自我,堅(jiān)持不斷學(xué)習(xí)、思考、沉淀、凈化自己,讓我們?yōu)楦嗟钠髽I(yè)打造出實(shí)用型網(wǎng)站。

 

CTestCopyConstruct GetTest()  {
CTestCopyConstruct ret1;
ret1.strTest  =   " ok " ;
ret1.i  =   0 ;
CTestCopyConstruct ret2;
return  ret1;
}

void  CTestDlg::OnOK()
 {
CTestCopyConstruct var1;
CTestCopyConstruct var2  =  GetTest();

TRACE( " /nresult 1:/n " );
TRACE( " var1 is %d/n " , & var1);
TRACE( " var2 is %d var2.str is %s/n/n " , & var2,var2.strTest);

CTestCopyConstruct var3  =  var2;
CTestCopyConstruct var4;
var4  =  var2;

TRACE( " /nresult 2:/n " );
TRACE( " var3 is %d var3.str is %s/n " , & var3,var3.strTest);
TRACE( " var4 is %d var2.str is %s/n " , & var4,var4.strTest);
}

 代碼如上,調(diào)試窗口輸出如下:
Enter CTestCopyConstruct();this is 1242980
Enter CTestCopyConstruct();this is 1242848
Enter CTestCopyConstruct();this is 1242840
Enter CTestCopyConstruct(const CTestCopyConstruct &src);this is 1242972;src is 1242848

result 1:
var1 is 1242980
var2 is 1242972 var2.str is ok

Enter CTestCopyConstruct(const CTestCopyConstruct &src);this is 1242964;src is 1242972
Enter CTestCopyConstruct();this is 1242956
Enter CTestCopyConstruct & operator =(const CTestCopyConstruct & src);this is 1242956;src is 1242972

result 2:
var3 is 1242964 var3.str is ok
var4 is 1242956 var2.str is ok

分析:
CTestCopyConstruct var1;//1
CTestCopyConstruct var2 = GetTest();//2
代碼的執(zhí)行如下:
當(dāng)前堆棧指針(sp) = 1242980
sp -= 8//在堆棧中為var1分配空間
在var1上(1242980 - 1242973)調(diào)用構(gòu)造函數(shù)
sp -= 8//在堆棧中為var2分配空間
sp -= n//保護(hù)當(dāng)前環(huán)境
進(jìn)入了GetTest函數(shù)
當(dāng)前sp = 1242848
sp -= 8//為ret1分配空間
構(gòu)建ret1
sp -= 8//為ret2分配空間
構(gòu)建ret2
......
對(duì)var2(1242972處的堆棧段)調(diào)用拷貝構(gòu)造函數(shù),以test1(1242848處)為參數(shù)
//析構(gòu)test1 test2等...
sp += n//恢復(fù)運(yùn)行環(huán)境
......

另:
operater = () 和默認(rèn)構(gòu)造函數(shù)不一樣,只重寫(xiě)=運(yùn)算符而不提供拷貝構(gòu)造函數(shù),調(diào)用的仍然是默認(rèn)的構(gòu)造函數(shù)。
默認(rèn)構(gòu)造函數(shù)和賦值運(yùn)算符處理的情況不一樣,一個(gè)是在已分配的空間上調(diào)用,一個(gè)是在已構(gòu)造的對(duì)象上調(diào)用。

默認(rèn)拷貝構(gòu)造函數(shù)會(huì)調(diào)用類(lèi)中各成員的拷貝構(gòu)造函數(shù)。CString 由于提供了拷貝構(gòu)造函數(shù),所以上面例子中即使去掉拷貝構(gòu)造函數(shù),var2 仍然會(huì)得到正確的值。

調(diào)試的環(huán)境是vc6.0 debug 默認(rèn)選項(xiàng)。編譯沒(méi)有優(yōu)化。

CTestCopyConstruct( const  CTestCopyConstruct  & src)
:strTest (src.strTest)  {
TRACE( " Enter CTestCopyConstruct(const CTestCopyConstruct &src);this is %d;src is %d/n " , this , & src);
i  =  src.i;
}

前者先調(diào)用了CString::CString()再調(diào)用CString::operator =
后者直接調(diào)用了CString::CString(CString & src);


默認(rèn)的賦值運(yùn)算的行為:首先調(diào)用父類(lèi)的賦值運(yùn)算。
然后會(huì)為自己獨(dú)有的各成員尋找賦值運(yùn)算。如果成員的賦值運(yùn)算符被重寫(xiě),則調(diào)用這個(gè)重寫(xiě)的賦值運(yùn)算符函數(shù),如果這個(gè)重寫(xiě)的運(yùn)算符函數(shù)是private,編譯將無(wú)法通過(guò)。
默認(rèn)的拷貝構(gòu)造函數(shù)的行為:首先調(diào)用父類(lèi)的拷貝構(gòu)造函數(shù)。
然后為自己獨(dú)有的各成員尋找拷貝構(gòu)造函數(shù)。如果這個(gè)成員提供拷貝構(gòu)造函數(shù),則調(diào)用之,如果成員的類(lèi)提供的拷貝構(gòu)造函數(shù)是private,編譯將無(wú)法通過(guò)。
(子類(lèi)完全可以把父類(lèi)當(dāng)成自己的一個(gè)成員?)

可以說(shuō)默認(rèn)的賦值運(yùn)算和默認(rèn)的拷貝構(gòu)造函數(shù)是類(lèi)最常被用到的兩個(gè)函數(shù)了...內(nèi)部卻不是一般的復(fù)雜。


關(guān)于如何進(jìn)行C++拷貝構(gòu)造函數(shù)深入分析以及重寫(xiě)operator 就分享到這里了,希望以上內(nèi)容可以對(duì)大家有一定的幫助,可以學(xué)到更多知識(shí)。如果覺(jué)得文章不錯(cuò),可以把它分享出去讓更多的人看到。

當(dāng)前文章:如何進(jìn)行C++拷貝構(gòu)造函數(shù)深入分析以及重寫(xiě)operator-創(chuàng)新互聯(lián)
網(wǎng)頁(yè)鏈接:http://jinyejixie.com/article2/dcgpic.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供網(wǎng)站設(shè)計(jì)搜索引擎優(yōu)化、品牌網(wǎng)站制作、軟件開(kāi)發(fā)、建站公司服務(wù)器托管

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶(hù)投稿、用戶(hù)轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)

網(wǎng)站優(yōu)化排名
鄯善县| 新龙县| 陇西县| 山阳县| 秦安县| 中卫市| 徐闻县| 扎囊县| 永兴县| 古交市| 安岳县| 梅河口市| 桦甸市| 沙河市| 瓮安县| 平潭县| 塔城市| 南康市| 革吉县| 朝阳区| 萍乡市| 忻城县| 花莲县| 拜泉县| 泰宁县| 新建县| 建宁县| 界首市| 连城县| 古田县| 抚顺市| 道真| 泰兴市| 万荣县| 和顺县| 垣曲县| 班玛县| 大英县| 德清县| 鄯善县| 湘潭市|