第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號安全,請及時(shí)綁定郵箱和手機(jī)立即綁定

含有對象的拷貝構(gòu)造函數(shù)及其初始化列表

http://img1.sycdn.imooc.com//562ae23b00012b0b05230467.jpg

運(yùn)行時(shí)系統(tǒng)會(huì)有:


http://img1.sycdn.imooc.com//562ae2c6000154c209370531.jpg

正在回答

4 回答

直接在你的評論下回復(fù)有字?jǐn)?shù)限制,我再發(fā)一條回答好了。

你前一次的錯(cuò)誤是缺少函數(shù)定義,根本不能編譯。

這次加上base的默認(rèn)構(gòu)造函數(shù)后,可以編譯并運(yùn)行了。


但如果你只是加上base的默認(rèn)構(gòu)造函數(shù),沒有改別處的話,那這次的錯(cuò)誤就在于:

Big的拷貝構(gòu)造函數(shù)還是沒有做任何事!?且不說它并沒有拷貝a1的內(nèi)容,甚至也沒有初始化自己的成員變量。 這種情況下,Big的成員變量會(huì)被默認(rèn)初始化:也即是int v被默認(rèn)初始化為隨機(jī)值;base b就調(diào)用了自己的默認(rèn)構(gòu)造函數(shù),這樣b.k就是0(前一次就因?yàn)闆]有base的默認(rèn)構(gòu)造函數(shù),所以在這里編譯失?。?/span>

所以第二行輸出的內(nèi)容最后是一個(gè)0(a2.b.k),前面那一大串就是a2.v中的隨機(jī)值。

0 回復(fù) 有任何疑惑可以回復(fù)我~
#1

qq_陽光下的海風(fēng)_0 提問者

非常敬佩老師認(rèn)真負(fù)責(zé)的態(tài)度
2015-10-26 回復(fù) 有任何疑惑可以回復(fù)我~
#2

qq_陽光下的海風(fēng)_0 提問者

哦哦哦,我想我可能沒有理解透自己定義的默認(rèn)構(gòu)造函數(shù)和系統(tǒng)默認(rèn)的構(gòu)造函數(shù)吧。 剛剛我用注釋掉拷貝構(gòu)造函數(shù),運(yùn)行的到預(yù)期的結(jié)果, 所以,可以這樣理解自己定義的默認(rèn)構(gòu)造函數(shù)和系統(tǒng)默認(rèn)的構(gòu)造函數(shù)吧:自己定義的默認(rèn)構(gòu)造函數(shù)在某種方面來說是“靜態(tài)”的,你想讓它干什么,他就可以干什么,但是它不會(huì)隨著整個(gè)程序內(nèi)容的特殊而改變,而系統(tǒng)默認(rèn)的構(gòu)造函數(shù)可以說是“動(dòng)態(tài)”的,隨著需求的改變而改變。 可以這樣理解嗎,老師?
2015-10-26 回復(fù) 有任何疑惑可以回復(fù)我~
#3

onemoo 回復(fù) qq_陽光下的海風(fēng)_0 提問者

這里你說的“系統(tǒng)默認(rèn)的構(gòu)造函數(shù)”是編譯器自動(dòng)生成的拷貝構(gòu)造函數(shù)。 當(dāng)你沒有定義拷貝構(gòu)造函數(shù)時(shí),編譯器會(huì)自動(dòng)生成一個(gè)拷貝構(gòu)造函數(shù),它的行為僅僅是簡單地拷貝將所有的成員變量。 Big::v是個(gè)內(nèi)置int類型,進(jìn)行簡單的拷貝沒有問題。 Big::b是base類型,對它進(jìn)行拷貝會(huì)調(diào)用base的拷貝構(gòu)造函數(shù)。 你也沒有定義base的拷貝構(gòu)造函數(shù),同樣編譯器為base生成了一個(gè),也僅僅是將base::k進(jìn)行拷貝,這也沒有問題。 所以最終代碼能得到正確的結(jié)果。 復(fù)雜一些的類在拷貝時(shí)就不能僅僅簡單地復(fù)制成員變量了,這時(shí)就不能依賴編譯器自動(dòng)生成的拷貝構(gòu)造函數(shù)了,需要你自己實(shí)現(xiàn)一個(gè)。
2015-10-27 回復(fù) 有任何疑惑可以回復(fù)我~
#4

qq_陽光下的海風(fēng)_0 提問者 回復(fù) onemoo

老師,我的編譯器真的可以用默認(rèn)拷貝構(gòu)造函數(shù)的。 由于字?jǐn)?shù)限制,就只好回復(fù)在評論下了
2015-10-28 回復(fù) 有任何疑惑可以回復(fù)我~
#5

onemoo 回復(fù) qq_陽光下的海風(fēng)_0 提問者

誒,我沒說不可以??! 仔細(xì)讀讀我上個(gè)回答的第二行,也分析了為什么系統(tǒng)自動(dòng)生成的拷貝構(gòu)造函數(shù)可以應(yīng)用于Big類。 最后還指出了自動(dòng)生成的拷貝構(gòu)造函數(shù)的局限性。
2015-10-29 回復(fù) 有任何疑惑可以回復(fù)我~
查看2條回復(fù)
?onemoo:class?base
{
public:
????int?k;
????base(int?n):k(n)?{}
????//base(){}

};
class?Big
{


public:
????int?v;
????base?b;

?????Big(int?n=0):v(n),b(n){}
?????//Big(const?Big?&c):v(c.v),b(c.b){}
?????//Big(const?Big?&c){v=c.v;b=c.b;}//沒有拷貝構(gòu)造函數(shù)也可以
};
int?main()
{
????Big?a1(5);
????Big?a2=a1;
????cout<<a1.v<<a1.b.k<<endl;
????cout<<a2.v<<a2.b.k<<endl;
????return?0;
}
可能是編譯器的原因吧,我這個(gè)可以呀
運(yùn)行結(jié)果是正確的


0 回復(fù) 有任何疑惑可以回復(fù)我~
#1

onemoo

確實(shí)可以啊。 我前面的回答中說了“當(dāng)你沒有定義拷貝構(gòu)造函數(shù)時(shí),編譯器會(huì)自動(dòng)生成一個(gè)拷貝構(gòu)造函數(shù),它的行為僅僅是簡單地拷貝將所有的成員變量。” 也說了,Big中的成員變量都可以進(jìn)行拷貝,所以是可以編譯通過的。
2015-10-29 回復(fù) 有任何疑惑可以回復(fù)我~
#2

qq_陽光下的海風(fēng)_0 提問者 回復(fù) onemoo

我是想說運(yùn)行結(jié)果也是對的。
2015-10-29 回復(fù) 有任何疑惑可以回復(fù)我~
#3

onemoo 回復(fù) qq_陽光下的海風(fēng)_0 提問者

哦,對。 因?yàn)檫@兩個(gè)類都很簡單,把每個(gè)成員變量都復(fù)制一遍就可以完成拷貝,正好和系統(tǒng)自動(dòng)生成的拷貝構(gòu)造函數(shù)的行為一樣,所以你使用自動(dòng)生成的拷貝構(gòu)造函數(shù)也不會(huì)有問題。 只是復(fù)雜的類就不一定能用自動(dòng)生成的拷貝構(gòu)造函數(shù)了。
2015-10-30 回復(fù) 有任何疑惑可以回復(fù)我~

562cd61e000146ef04980416.jpg

http://img1.sycdn.imooc.com//562cd6340001fd6b06580424.jpg

我試了一下給base類定義了默認(rèn)構(gòu)造函數(shù),可是,從運(yùn)行的結(jié)果來看,在拷貝構(gòu)造函數(shù)那里還是出錯(cuò)了!

請幫我看看,哪里有問題?


0 回復(fù) 有任何疑惑可以回復(fù)我~

你定義了Big的拷貝構(gòu)造函數(shù),但它的函數(shù)體中是空的,也就是這個(gè)函數(shù)不做任何事。

Big a2 = a1; 這句需要拷貝構(gòu)造Big,而Big的拷貝構(gòu)造函數(shù)沒有把成員變量base b初始化。那么b會(huì)調(diào)用自己的默認(rèn)構(gòu)造函數(shù),可是base類唯一的一個(gè)構(gòu)造函數(shù)是 base(int n),你沒有定義base的默認(rèn)構(gòu)造函數(shù)!?


所以解決方法是:

要么為base類定義一個(gè)默認(rèn)構(gòu)造函數(shù)。?

要么在Big(const Big &c)中用構(gòu)造初始化列表的方式調(diào)用base的構(gòu)造函數(shù)。

0 回復(fù) 有任何疑惑可以回復(fù)我~
#1

qq_陽光下的海風(fēng)_0 提問者

我試了一下給base類定義了默認(rèn)構(gòu)造函數(shù),可是,從運(yùn)行的結(jié)果來看,在拷貝構(gòu)造函數(shù)那里還是出錯(cuò)了! 請幫我看看,哪里有問題? 因?yàn)榛貜?fù)時(shí)不能添加圖片,所以麻煩您到我對自己的評論上看下。感激不盡
2015-10-25 回復(fù) 有任何疑惑可以回復(fù)我~

舉報(bào)

0/150
提交
取消
C++遠(yuǎn)征之封裝篇(上)
  • 參與學(xué)習(xí)       103386    人
  • 解答問題       732    個(gè)

封裝--面向?qū)ο蟮幕?,本教程力求幫助小伙伴們即學(xué)即會(huì)

進(jìn)入課程

含有對象的拷貝構(gòu)造函數(shù)及其初始化列表

我要回答 關(guān)注問題
微信客服

購課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動(dòng)學(xué)習(xí)伙伴

公眾號

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號