3 回答

TA貢獻(xiàn)89條經(jīng)驗(yàn) 獲得超53個(gè)贊
在childlabourer類(lèi)的構(gòu)造函數(shù)中的初始化列表中加上Person(name)就行了。

TA貢獻(xiàn)883條經(jīng)驗(yàn) 獲得超454個(gè)贊
剛看到你采納了我在其他問(wèn)題中的回答,就順手點(diǎn)進(jìn)來(lái)了。
你采納的那個(gè)答案回答得很正確,我稍微進(jìn)行一下補(bǔ)充:
一般來(lái)說(shuō),派生類(lèi)只需要負(fù)責(zé)構(gòu)造其直接基類(lèi),因?yàn)殚g接基類(lèi)會(huì)由直接基類(lèi)負(fù)責(zé)構(gòu)造。但虛繼承下有些特殊:最后的派生類(lèi)要負(fù)責(zé)構(gòu)造虛基類(lèi)(即便是間接虛基類(lèi))?;蛘哒f(shuō),虛基類(lèi)的構(gòu)造會(huì)優(yōu)先于普通基類(lèi),所以必須由最后的派生類(lèi)來(lái)負(fù)責(zé)先構(gòu)造。
如若不然的話你想想會(huì)發(fā)生什么? ?多個(gè)被虛基類(lèi)派生的直接基類(lèi)會(huì)重復(fù)構(gòu)造虛基類(lèi)部分,為避免發(fā)生這種情況才有這個(gè)額外規(guī)則。
你的例子,雖然?Worker 和?Children 都會(huì)構(gòu)造 Person,但由于 Person 是?ChildLabourer 的虛基類(lèi),所以?ChildLabourer 必須先顯式構(gòu)造 Person。如果沒(méi)有顯式構(gòu)造它,則會(huì)自動(dòng)調(diào)用 Person 的默認(rèn)構(gòu)造函數(shù)。

TA貢獻(xiàn)15條經(jīng)驗(yàn) 獲得超13個(gè)贊
因?yàn)橥ゎ?lèi)繼承工人類(lèi)和兒童類(lèi),屬于多重繼承。所在Person類(lèi),Worker類(lèi),Children類(lèi)的構(gòu)造函數(shù)都要加上virtual,這樣才可以實(shí)現(xiàn)虛繼承!
- 3 回答
- 0 關(guān)注
- 2118 瀏覽
添加回答
舉報(bào)