青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品

brent's hut

C++拷貝構造函數深入分析以及重寫operator =

?

class ?CTestCopyConstruct {
public :
????CTestCopyConstruct()
{
????????TRACE(
" Enter?CTestCopyConstruct();this?is?%d\n " , this );
????????strTest?
= ? " not?ok " ;
????????i?
= ? 0 ;
????}

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

????CTestCopyConstruct?
& ?operator? = ( const ?CTestCopyConstruct? & ?src) {
????????TRACE(
" Enter?CTestCopyConstruct?&?operator?=(const?CTestCopyConstruct?&?src);this?is?%d;src?is?%d\n " , this , & src);
????????strTest?
= ?src.strTest;
????????i?
= ?src.i;
????????
return ? * this ;
????}

????CString?strTest;
????
int ?i;
}
;

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);
}



代碼如上,調試窗口輸出如下:
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
代碼的執行如下:
當前堆棧指針(sp) = 1242980
sp -= 8//在堆棧中為var1分配空間
在var1上(1242980 - 1242973)調用構造函數
sp -= 8//在堆棧中為var2分配空間
sp -= n//保護當前環境
進入了GetTest函數
當前sp = 1242848
sp -= 8//為ret1分配空間
構建ret1
sp -= 8//為ret2分配空間
構建ret2
......
對var2(1242972處的堆棧段)調用拷貝構造函數,以test1(1242848處)為參數
//析構test1 test2等...
sp += n//恢復運行環境
......

另:
operater = () 和默認構造函數不一樣,只重寫=運算符而不提供拷貝構造函數,調用的仍然是默認的構造函數。
默認構造函數和賦值運算符處理的情況不一樣,一個是在已分配的空間上調用,一個是在已構造的對象上調用。

默認拷貝構造函數會調用類中各成員的拷貝構造函數。CString 由于提供了拷貝構造函數,所以上面例子中即使去掉拷貝構造函數,var2 仍然會得到正確的值。

調試的環境是vc6.0 debug 默認選項。編譯沒有優化。

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




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;
????}

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


默認的賦值運算的行為:首先調用父類的賦值運算。
然后會為自己獨有的各成員尋找賦值運算。如果成員的賦值運算符被重寫,則調用這個重寫的賦值運算符函數,如果這個重寫的運算符函數是private,編譯將無法通過。
默認的拷貝構造函數的行為:首先調用父類的拷貝構造函數。
然后為自己獨有的各成員尋找拷貝構造函數。如果這個成員提供拷貝構造函數,則調用之,如果成員的類提供的拷貝構造函數是private,編譯將無法通過。
(子類完全可以把父類當成自己的一個成員?)


可以說默認的賦值運算和默認的拷貝構造函數是類最常被用到的兩個函數了...內部卻不是一般的復雜。

posted on 2006-03-30 10:34 brent 閱讀(1597) 評論(0)  編輯 收藏 引用 所屬分類: C++

青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>
            欧美成人免费网站| 亚洲第一精品夜夜躁人人爽| 中文精品视频| 99re8这里有精品热视频免费| 91久久精品日日躁夜夜躁国产| 欧美激情精品久久久久久变态| 欧美国产日韩精品| 91久久久久久国产精品| 亚洲欧洲久久| 亚洲天堂av在线免费观看| 香蕉国产精品偷在线观看不卡| 久久久久九九九| 欧美日产一区二区三区在线观看| 国产精品yjizz| 黄色成人在线网址| 99在线精品观看| 久久动漫亚洲| 亚洲国产日韩一区| 亚洲一区二区少妇| 免费欧美日韩| 国产精品亚洲产品| 亚洲欧洲另类国产综合| 欧美在线精品一区| 亚洲每日在线| 亚洲在线不卡| 久久狠狠一本精品综合网| 欧美成人免费大片| 亚洲图片在线观看| 久热精品视频在线观看| 国产精品xvideos88| 亚洲国产精品尤物yw在线观看| 亚洲午夜av电影| 欧美成人精品在线观看| 亚洲制服欧美中文字幕中文字幕| 榴莲视频成人在线观看| 国产欧美一级| 亚洲婷婷国产精品电影人久久| 久久综合电影| 亚洲欧美国产毛片在线| 欧美母乳在线| 亚洲人成在线影院| 老妇喷水一区二区三区| 亚洲一区尤物| 欧美三级小说| 99视频国产精品免费观看| 久久综合五月| 久久国产精品第一页| 国产精品嫩草99a| 亚洲在线免费观看| 亚洲免费播放| 欧美另类专区| 亚洲精品影视| 亚洲国产成人久久综合一区| 久久久精品免费视频| 国产精品一区二区久久久久| 亚洲影音一区| 亚洲少妇一区| 国产精品国产三级国产普通话99| 一区二区三区视频在线| 亚洲乱码日产精品bd| 欧美精品首页| 亚洲精品一区在线| 亚洲精品中文字| 欧美三区美女| 午夜精品久久久久久久| 亚洲午夜在线观看视频在线| 国产精品一区二区久久久| 欧美一区二区三区另类| 久久国产视频网| 亚洲大胆在线| 亚洲欧洲一区二区三区在线观看| 欧美电影免费观看高清完整版| 亚洲精品裸体| 日韩午夜精品视频| 国产精品视频观看| 久久久97精品| 欧美jjzz| 亚洲欧美国产日韩中文字幕| 亚洲一区视频| 激情综合在线| 亚洲狼人精品一区二区三区| 国产精品大片| 久久亚洲精选| 欧美精品午夜| 欧美亚洲专区| 午夜精品久久久久久| 性刺激综合网| 亚洲国产精品一区| 亚洲毛片一区二区| 国产欧美视频一区二区三区| 久久综合伊人| 欧美视频中文一区二区三区在线观看| 午夜久久影院| 久久在线免费观看| 亚洲视频在线观看免费| 欧美一区二区三区在| 日韩视频免费观看高清在线视频 | 国产三级欧美三级| 蜜桃久久av一区| 欧美日韩亚洲免费| 久久美女艺术照精彩视频福利播放| 麻豆国产va免费精品高清在线| 一区二区成人精品| 欧美在线视频不卡| 一本色道久久综合精品竹菊| 欧美中文字幕久久| 正在播放日韩| 美女网站久久| 欧美一区午夜精品| 欧美久久视频| 久久综合久久88| 国产精品高清网站| 亚洲国产mv| 黄色亚洲网站| 亚洲欧美视频在线观看| 在线亚洲欧美专区二区| 免费在线欧美视频| 久久精品国产69国产精品亚洲| 欧美日韩国产在线看| 嫩草影视亚洲| 国内外成人免费激情在线视频网站 | 欧美在线免费播放| 亚洲一卡二卡三卡四卡五卡| 蜜臀久久99精品久久久画质超高清 | 久久三级视频| 国产精品欧美日韩一区| 亚洲六月丁香色婷婷综合久久| 在线看日韩欧美| 欧美一级欧美一级在线播放| 亚洲欧美日韩国产中文| 欧美日韩p片| 亚洲理论在线| 日韩天天综合| 欧美国产精品一区| 亚洲第一区色| 亚洲精品国产品国语在线app| 久久伊人亚洲| 欧美freesex8一10精品| 欧美日韩一区三区四区| 欧美激情a∨在线视频播放| 在线免费日韩片| 久久久久国产一区二区三区| 午夜影视日本亚洲欧洲精品| 欧美精品v国产精品v日韩精品| 欧美搞黄网站| 性久久久久久久久久久久| 欧美日韩三区四区| 免费亚洲婷婷| 亚洲国产裸拍裸体视频在线观看乱了中文 | 欧美激情在线播放| 欧美成人亚洲| 亚洲日本成人在线观看| 欧美韩国一区| 日韩天天综合| 欧美影院成人| 在线日韩欧美视频| 欧美成年人视频网站欧美| 日韩一级免费| 久久精品亚洲一区二区| 亚洲高清在线观看| 欧美肉体xxxx裸体137大胆| 亚洲综合色激情五月| 久久亚洲私人国产精品va媚药| 亚洲成色精品| 国产精品v一区二区三区| 欧美一区免费视频| 亚洲福利一区| 亚洲香蕉视频| 国产视频欧美视频| 欧美aa国产视频| 亚洲视频网站在线观看| 久久久久综合| 一本久道久久久| 国产一区二区三区在线观看免费视频| 久久青草久久| 亚洲午夜激情| 亚洲国产经典视频| 欧美一站二站| 9l国产精品久久久久麻豆| 国产欧美日韩视频| 欧美激情一二区| 久久高清国产| 亚洲一区视频| 亚洲另类在线视频| 久久一二三四| 亚洲综合色噜噜狠狠| 亚洲激情视频在线播放| 国产精品一区一区三区| 欧美激情一区二区三区成人| 午夜亚洲伦理| 99热精品在线| 亚洲福利视频二区| 久热精品视频在线| 性久久久久久| 亚洲中午字幕| 中日韩美女免费视频网址在线观看 | 国产精品盗摄一区二区三区| 久久一区二区三区超碰国产精品| 亚洲免费在线| 99在线精品视频|