【发布时间】:2017-07-17 00:16:56
【问题描述】:
假设我们有基类:
class CommonClass {
...
int common_value;
}
class ParentOfA {
...
int some_int;
int some_int_2;
}
class ParentOfB {
...
int some_int_3;
}
我们继承了类:
class ClassA : ParentOfA, CommonClass
class ClassB : ParentOfB, CommonClass
那么ClassA 和ClassB 将具有如下结构:
ClassA:
ParentOfA:
int some_int;
int some_int_2;
int common_value;
ClassB:
ParentOfB:
int some_int_3;
int common_value;
因此,对于同一个common_value 成员变量,在ClassA 中它距ClassA 的指针8 个字节,而在ClassB 中仅4 个字节。
那么在以下情况下(假设它在.cpp文件中已经如此编译):
int GetCommonValue(CommonClass* ptr) {
return ptr->common_value;
}
编译器如何提前知道在处理->common_value 时要查找的偏移量? ClassA 和 ClassB 都可以作为指针传入。
【问题讨论】:
-
指向
CommonClass的指针将在调用处进行调整,使函数在所有情况下都可以使用相同的偏移量。
标签: c++ pointers inheritance multiple-inheritance memory-layout