【发布时间】:2009-06-16 16:11:37
【问题描述】:
单继承很容易实现。例如,在 C 中,继承可以模拟为:
struct Base { int a; }
struct Descendant { Base parent; int b; }
但是对于多重继承,编译器必须在新构建的类中安排多个父级。是怎么做到的?
我看到的问题是:父母应该安排在AB还是BA,或者甚至其他方式?然后,如果我进行演员表:
SecondBase * base = (SecondBase *) &object_with_base1_and_base2_parents;
编译器必须考虑是否改变原始指针。虚拟机也需要类似的棘手操作。
【问题讨论】:
-
你C模拟忘记了VTable(实现细节)指针。
-
@Dario:本文讨论的是多重继承中的重载问题,但不包含任何关于 C++ 中对象布局和对象转换的内容。
-
@Martin York:如果类中没有虚方法,则没有 v-table 指针。
标签: c++ inheritance compiler-construction multiple-inheritance language-implementation