【发布时间】:2018-05-16 12:03:57
【问题描述】:
多重继承
class A{};
class B{};
class C: public A, public B{};
当我这样做时会发生什么
C *c = new C;
A *a = c;
B *b = c;
A *a1 = new C;
B *b1 = new C;
C 的第一个实例会发生什么?将 C 分配给 A 类型的指针是否对对象进行切片,因此 A 仅指向包含 A 成员的 C 的一部分? 如果是这样,它如何知道何时达到顶峰?如果 C 包含 A 部分和 B 部分,并且 A 部分从偏移量 0 开始,它如何知道停止哪个偏移量?
感谢您的帮助。
【问题讨论】:
-
你少了很多分号。
-
您的代码中不会发生切片。
A a = C()会进行切片。 -
Google "c++ adjustor thunks" 以查找可能与您的特定编译器相关的匹配项。
-
另一个不错的读物是shaharmike.com/cpp/vtable-part1,它讨论了 GCC 编译器如何布局 C++ vtables。
-
thunk 和 vtables 不适用于显示的代码。编译器在将
C*隐式转换为B*时简单地添加一个常量偏移量。
标签: c++ pointers inheritance