[英]is multiple inheritance a compiler writers problem? - c++
我一直在閱讀有關多重繼承的內容
多重繼承的確切問題是什么? http://en.wikipedia.org/wiki/Diamond_problem
http://en.wikipedia.org/wiki/Virtual_inheritance
http://en.wikipedia.org/wiki/Multiple_inheritance
但是,由於代碼在解決歧義之前不能編譯,這不會使多重繼承成為編譯器編寫者的問題嗎? - 如果我不想編寫編譯器,這個問題如何影響我
如果你想編寫編譯的代碼,你必須知道哪些問題可能導致它不能編譯以及如何避免這些情況。 作為編譯器的用戶,您可以以可編譯的方式設計繼承層次結構。
此外,如果您不理解多繼承如何工作,您可能會錯誤地假設您的類究竟是做什么的。 如果類的行為與預期不同,則在嘗試使用它們時會導致錯誤。
如果由於多重繼承而導致未解決的歧義,編譯器編寫器將打印一個討厭的錯誤消息並停止編譯代碼。 當他們說代碼在解決歧義之前不會編譯時,有幾個問題需要考慮:
不,它對編譯器編寫器來說不是問題:
對於C ++程序員來說這是一個問題,但前提是你不了解MI在C ++中是如何工作的。
我有一個通用的解決方案,它有一個定義公共接口的基類 - 你可以認為它有不同的子部分,然后你可以將它們實現為不同的抽象類,它們由一個具體的葉子類多次繼承:
------
| Base |
------
| |
------
^
|
-----------------
| | |
------ ------ ------
| A | | B | | C |
------ ------ ------
| | | | | |
------ ------ ------
^ ^ ^
| | |
-----------------
|
-------
|Derived|
-------
| |
-------
A,B和C中的每一個都實現Base的非重疊子部分,這意味着您可以替換A,代替A'用於替代或改進的實現而不影響任何其他類。
一般來說,是的,你在頭上釘了一針。 它顯着增加了維護編譯器所涉及的復雜性和工作量,但對於程序員來說,它只增加了少量額外的復雜性,主要與如果鑽石問題出現時必須冗長具體相關。 (在精心設計的對象層次結構中,這應該是非常罕見的。)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.