6
A
回答
1
取決於編譯器,虛擬繼承以不同的方式實現。
1)是的,vc和gcc都使用vTable指針。但是vc有另一個指針ref作爲虛擬基址指針。
2)對於經典的虛擬繼承,如Left < Top;右邊<頂部;底部<左,右 堆棧應該是這樣的:
Left.vptr // -> to its vtable
Left::element_in_left
Right.vptr
Right::element_in_right
Bottom::element_in_bottom
Top::element_in_top
程序使用的vptr找到虛函數表,對海灣合作委員會,有一個虛擬的基地,在可行的偏移值。 vptr + base offset將會給出父地址。
3)我不確定你是什麼意思。有不同的方式在C++編譯器中實現它。其他語言有他們的方法來綁定函數。
+0
非常感謝!它似乎退出複雜!你能推薦我一些簡單的文章或書籍閱讀有關這個。 –
+0
@NayanaAdassuriya我已經閱讀了我的母語文章中的這些知識,所以我不熟悉英文書籍。我想你可以在谷歌搜索「C++內存佈局虛擬繼承」,有很多很棒的帖子。 – halfelf
相關問題
- 1. 虛擬繼承如何工作
- 2. 虛擬繼承
- 3. 虛擬繼承
- 4. 虛擬繼承
- 5. C++ - 虛擬繼承
- 6. C++:虛擬繼承
- 7. 多虛擬繼承
- 8. 虛擬繼承表如何在g ++中工作?
- 9. 純虛擬繼承,多繼承和C4505
- 10. 如何避免虛擬繼承
- 11. 虛擬繼承如何解決「菱形」(多重繼承)歧義?
- 12. 單個虛擬繼承
- 13. 繼承和虛擬方法
- 14. 虛擬繼承查詢
- 15. C++虛擬菱形繼承
- 16. 聯盟虛擬繼承
- 17. 虛擬繼承和接口
- 18. 約C++虛擬繼承
- 19. 虛擬繼承在vs2013
- 20. 常量和虛擬繼承
- 21. C++虛擬繼承差
- 22. C++中的虛擬繼承
- 23. 從基類虛擬繼承
- 24. 虛擬函數繼承
- 25. 的在C++虛擬繼承
- 26. 問題在虛擬繼承
- 27. 虛擬繼承混亂
- 28. 虛擬類和繼承
- 29. C++虛擬/非虛鑽石繼承
- 30. 繼承虛擬類和非虛類
定義的實現。 – ildjarn
它是依賴於實現的,在嚴格的技術術語中它是* Unspecified *,C++標準只描述了虛擬繼承必須提供的行爲,但沒有指定它應該如何實現。它作爲實現&他們不需要指定這個細節。他說,大多數(* read all known *)的編譯器都使用虛擬表和指針機制。 –
說了上面的內容,不要認爲Q是無關緊要的,或者根本不是真正的Q.所有編譯器都使用類似的機制,雖然不需要知道實現細節,但知道它並不會讓人傷心。另外,如果有人抽出時間並且有說服力地回答,這個問題會被問到很多次,這會使得一個很好的C++ - faq。 –