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。 –