C++:将我的对象转换为不同的超类会导致不同的指针地址

mor*_*des 2 c++ polymorphism inheritance pointers

我正在学习C++,试图编写好的,多态的代码,然后遇到一些困惑.我有一个Er_1Sine类,它有两个超类:"Generator"和"Triggerable".

Er_1Sine看起来像这样:

class Er_1Sine : public Generator, public Triggerable{

}
Run Code Online (Sandbox Code Playgroud)

如果我创建一个"Generator"指针(gen),将其设置为"er1",则指针地址与"er1"的地址匹配.但是,我的"可触发"指针"trig"的地址不匹配.这里发生了什么?是不是指向与er1和gen相同的对象?

er1 = new Er_1Sine();   
Generator *gen = er1;
Triggerable *trig = er1;

printf("\n\n er1 as Er_1Sine: %p \n", er1);
// outputs: "er1 as Er_1Sine: 0x4d28920"

printf("er1 as Generator address: %p \n", gen);
// outputs: "er1 as Generator address: 0x4d28920"   

printf("er1 as Triggerable address: %p \n\n", trig);
// outputs: er1 as Triggerable address: 0x4d289f8
Run Code Online (Sandbox Code Playgroud)

Nik*_*sov 5

这是多重继承 - 基类子对象与子实例处于不同的偏移量,因此具有不同的地址.编译器前端必须在隐式upcast期间调整指针值.