在菱形繼承中的一個疑問
為什么執行p->Farmer::printColor();
??????????????????? p->Worker::printColor();
后,在輸出中是 Farmeryellow
????????????????????????????? Person--printColor
????????????????????????????? Workeryellow
????????????????????????????? Person--printColor
這樣?他們的執行順序是怎么來的
在void Person::printColor中還有cout<<m_strcolor<<endl;呢?
?????????????????????????????
2018-04-03
先建立父類對象,因為構造函數關系,又先執行,之后才是子類對象,就這么簡單啊
2017-09-04
p->Farmer::printColor()和p->Worker::printColor();執行的都是類Person中的printColor()函數,而在頭文件中加上虛繼承關鍵字virtual之前,類Person的函數被worker和farmer繼承,所以Person的默認值即你問的“m_strColor”被Farmeryellow和Workeryellow覆蓋。至于執行順序,就是Person類中的printColor()函數函數體中的的內容,先輸出m_strColor,再輸出"Person--printColor()",這樣說應該清晰一點吧!
2017-06-03
同求~