課程
/后端開發
/C++
/C++遠征之繼承篇
為什么這里的MigrantWorker傳入的yellow的顏色值可以傳遞到頂層父類Person中,能夠打印出來,而在后面的用了virtual虛繼承后打印出來的就是默認值blue?
2016-06-05
源自:C++遠征之繼承篇 6-3
正在回答
上面同學也說了,但我猜測,為什么不能傳遞呢,是由于虛繼承的時候,為了避免多次出現Person的定義以及成員的傳遞,它干脆強制將頂層父類的成員以影印的方式傳遞一份下來,這樣子就能避免你往頂層父類傳遞參數的時候,再次往下傳到子類時出現重復。
例如你圖片中的情況,實際上就有兩個頂層父類傳下來的color,如果不禁止你往回傳遞參數的話,無法將 只需要一份的color成員 傳遞參數值的‘權利’給Worker或Farmer,這時如果都有權利望頂層父類Person傳遞color的話,勢必會導致MigrantWorker有兩個color。因此它干脆不讓你傳遞回去了。
虛繼承中,頂層父類無法接受子類的參數傳遞,所以只能打印出來默認值blue,老師在講課的時候稍微提了下。如果有興趣的話可以自己通過編程驗證一下。
舉報
繼承,C++面向對象三大特征之一,通過編碼實踐方式講解到操作層面
Copyright ? 2025 imooc.com All Rights Reserved | 京ICP備12003892號-11 京公網安備11010802030151號
購課補貼聯系客服咨詢優惠詳情
慕課網APP您的移動學習伙伴
掃描二維碼關注慕課網微信公眾號
2016-07-22
上面同學也說了,但我猜測,為什么不能傳遞呢,是由于虛繼承的時候,為了避免多次出現Person的定義以及成員的傳遞,它干脆強制將頂層父類的成員以影印的方式傳遞一份下來,這樣子就能避免你往頂層父類傳遞參數的時候,再次往下傳到子類時出現重復。
例如你圖片中的情況,實際上就有兩個頂層父類傳下來的color,如果不禁止你往回傳遞參數的話,無法將 只需要一份的color成員 傳遞參數值的‘權利’給Worker或Farmer,這時如果都有權利望頂層父類Person傳遞color的話,勢必會導致MigrantWorker有兩個color。因此它干脆不讓你傳遞回去了。
2016-06-07
虛繼承中,頂層父類無法接受子類的參數傳遞,所以只能打印出來默認值blue,老師在講課的時候稍微提了下。如果有興趣的話可以自己通過編程驗證一下。