当我试图阐明我的问题时,忍受着我。我想我正在试图了解的东西是这样的:C++编译器如何处理具有多重继承的偏移量?
class Base1 { public: int value { 5 }; };
class Base2 { /* fields */ };
class Derived1 : public Base1 { ... };
class Derived2 : public Base2, public Derived1 { ... };
编译器如何解决像这样的代码的内存偏移?
void base1_action(Base1 *instance) {
cout << instance->value << endl;
}
void change_base(Base2* instance) {
base1_action(reinterpret_cast<Base1*>(instance));
}
int main() {
Base2* instance = new Derived2;
change_base(instance);
}
也就是说,如果在main
实际的对象实例是Derived2
型的,当change_base
基地发生变更从Base2
到Base1
,怎么是编译器能够知道如何重新计算的偏移这样当base1_action
被调用时,它会得到一个指向Base1
的正确偏移的指针?
换句话说,当存在多重继承时,编译器如何计算从一个基类到另一个基类的偏移量(而不是从已知派生类计算基类偏移量的简单问题)?
希望我的问题有点清楚 - 谢谢!
给出的示例代码不会编译。请提供编译的代码。 –
精灵魔法和一个实现定义塔科。 –
已编辑,现在应该编译。 – sircodesalot