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

為了賬號(hào)安全,請(qǐng)及時(shí)綁定郵箱和手機(jī)立即綁定
已解決430363個(gè)問(wèn)題,去搜搜看,總會(huì)有你想問(wèn)的

虛繼承,為何報(bào)錯(cuò),說(shuō)“Person::Person”: 沒(méi)有合適的默認(rèn)構(gòu)造函數(shù)可

虛繼承,為何報(bào)錯(cuò),說(shuō)“Person::Person”: 沒(méi)有合適的默認(rèn)構(gòu)造函數(shù)可

C++
MOCKINGT 2017-08-22 23:28:11
#include <iostream>#include <stdlib.h>#include <string>using namespace std;/*** 定義人類(lèi): Person*/class Person{public:?? ?Person(string name) :m_strName(name)?? ?{?? ??? ?cout << "Person" << endl;?? ?}?? ?~Person()?? ?{?? ??? ?cout << "~Person" << endl;?? ?}?? ?void eat()?? ?{?? ??? ?cout << "eat" << endl;?? ?}protected:?? ?string m_strName;};class Worker : virtual public Person{public:?? ?Worker(string name):Person(name)?? ?{?? ??? ?cout << "Worker" << endl;?? ?}?? ?~Worker()?? ?{?? ??? ?cout << "~Worker" << endl;?? ?}?? ?void work()?? ?{?? ??? ?cout << "work" << endl;?? ?}};class Children : virtual public Person{public:?? ?Children(int age,string name):m_iAge(age),Person(name)?? ?{?? ??? ?cout << "Children" << endl;?? ?}?? ?~Children()?? ?{?? ??? ?cout << "~Children" << endl;?? ?}?? ?void play()?? ?{?? ??? ?cout << m_iAge << endl;?? ??? ?cout << "play" << endl;?? ?}protected:?? ?int m_iAge;};class ChildLabourer :public Worker,public Children{public:?? ?ChildLabourer(string name, int age) :Worker(name),Children(age,name)?? ?{?? ??? ?cout << "ChildLabourer" << endl;?? ?}?? ??? ?~ChildLabourer()?? ?{?? ??? ?cout << "~ChildLabourer" << endl;?? ?}};int main(void){?? ?// 用new關(guān)鍵字實(shí)例化童工類(lèi)對(duì)象?? ?ChildLabourer *p = new ChildLabourer("jack",12);?? ??? ?// 調(diào)用童工類(lèi)對(duì)象各方法。?? ?p->eat();?? ?p->work();?? ?p->play();?? ?delete p;?? ?p = NULL;?? ?system("pause");?? ?return 0;}
查看完整描述

3 回答

已采納
?
snowmanJS

TA貢獻(xiàn)89條經(jīng)驗(yàn) 獲得超53個(gè)贊

在childlabourer類(lèi)的構(gòu)造函數(shù)中的初始化列表中加上Person(name)就行了。

查看完整回答
3 反對(duì) 回復(fù) 2017-08-23
  • MOCKINGT
    MOCKINGT
    謝謝、可以告訴我為什么嗎?
  • snowmanJS
    snowmanJS
    因?yàn)镻erson類(lèi)要先于其三個(gè)子類(lèi)初始化,即其構(gòu)造函數(shù)是最先執(zhí)行的。又因?yàn)镻erson沒(méi)有默認(rèn)構(gòu)造函數(shù),但有構(gòu)造函數(shù)Person(string name),所以必須在childlabourer的初始化列表中加上Person (name)。
?
onemoo

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ù)。

查看完整回答
1 反對(duì) 回復(fù) 2017-09-16
?
天將明96

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)虛繼承!

查看完整回答
反對(duì) 回復(fù) 2017-08-23
點(diǎn)擊展開(kāi)后面2
  • 3 回答
  • 0 關(guān)注
  • 2118 瀏覽

添加回答

舉報(bào)

0/150
提交
取消
微信客服

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

幫助反饋 APP下載

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

公眾號(hào)

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