課程
/后端開發(fā)
/C++
/C++遠(yuǎn)征之封裝篇(上)
運(yùn)行時(shí)系統(tǒng)會(huì)有:
2015-10-24
源自:C++遠(yuǎn)征之封裝篇(上) 6-7
正在回答
直接在你的評論下回復(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ī)值。
qq_陽光下的海風(fēng)_0 提問者
onemoo 回復(fù) qq_陽光下的海風(fēng)_0 提問者
qq_陽光下的海風(fēng)_0 提問者 回復(fù) onemoo
?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é)果是正確的
onemoo
我試了一下給base類定義了默認(rèn)構(gòu)造函數(shù),可是,從運(yùn)行的結(jié)果來看,在拷貝構(gòu)造函數(shù)那里還是出錯(cuò)了!
請幫我看看,哪里有問題?
你定義了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ù)。
舉報(bào)
封裝--面向?qū)ο蟮幕?,本教程力求幫助小伙伴們即學(xué)即會(huì)
Copyright ? 2025 imooc.com All Rights Reserved | 京ICP備12003892號-11 京公網(wǎng)安備11010802030151號
購課補(bǔ)貼聯(lián)系客服咨詢優(yōu)惠詳情
慕課網(wǎng)APP您的移動(dòng)學(xué)習(xí)伙伴
掃描二維碼關(guān)注慕課網(wǎng)微信公眾號
2015-10-26
直接在你的評論下回復(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ī)值。
2015-10-28
2015-10-25
我試了一下給base類定義了默認(rèn)構(gòu)造函數(shù),可是,從運(yùn)行的結(jié)果來看,在拷貝構(gòu)造函數(shù)那里還是出錯(cuò)了!
請幫我看看,哪里有問題?
2015-10-25
你定義了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ù)。