亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定

在菱形繼承中的一個疑問

為什么執行p->Farmer::printColor();
??????????????????? p->Worker::printColor();
后,在輸出中是 Farmeryellow
????????????????????????????? Person--printColor
????????????????????????????? Workeryellow
????????????????????????????? Person--printColor
這樣?他們的執行順序是怎么來的
在void Person::printColor中還有cout<<m_strcolor<<endl;呢?
?????????????????????????????

正在回答

3 回答

先建立父類對象,因為構造函數關系,又先執行,之后才是子類對象,就這么簡單啊

0 回復 有任何疑惑可以回復我~

p->Farmer::printColor()和p->Worker::printColor();執行的都是類Person中的printColor()函數,而在頭文件中加上虛繼承關鍵字virtual之前,類Person的函數被worker和farmer繼承,所以Person的默認值即你問的“m_strColor”被Farmeryellow和Workeryellow覆蓋。至于執行順序,就是Person類中的printColor()函數函數體中的的內容,先輸出m_strColor,再輸出"Person--printColor()",這樣說應該清晰一點吧!

0 回復 有任何疑惑可以回復我~

同求~

0 回復 有任何疑惑可以回復我~
#1

慕圣2268672

p->Farmer::printColor()和p->Worker::printColor();執行的都是類Person中的printColor()函數,而在頭文件中加上虛繼承關鍵字virtual之前,類Person的函數被worker和farmer繼承,所以Person的默認值即你問的“m_strColor”被Farmeryellow和Workeryellow覆蓋。至于執行順序,就是Person類中的printColor()函數函數體中的的內容,先輸出m_strColor,再輸出"Person--printColor()",這樣說應該清晰一點吧!
2017-09-04 回復 有任何疑惑可以回復我~

舉報

0/150
提交
取消
C++遠征之繼承篇
  • 參與學習       75192    人
  • 解答問題       251    個

繼承,C++面向對象三大特征之一,通過編碼實踐方式講解到操作層面

進入課程

在菱形繼承中的一個疑問

我要回答 關注問題
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號