说我们有基类:在多继承的情况下,C++编译器如何处理成员变量内存偏移量?
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
它距离01个字节8个字节的指针,而在ClassB
它只有4个字节。
然后在下面的情况下(假设它是在.cpp文件等等已经编译):
int GetCommonValue(CommonClass* ptr) {
return ptr->common_value;
}
编译器如何提前知道什么时间偏移查找处理->common_value
什么时候?可以将ClassA
和ClassB
作为指针传入。
指向'CommonClass'的指针将在调用站点进行调整,以便函数可以在所有情况下使用相同的偏移量。 –