我正在学习C++,试图编写出色的多态代码,并陷入困惑。我有一个Er_1Sine类,它具有两个父类(super class):“Generator”和“Triggerable”。

Er_1Sine看起来像这样:

class Er_1Sine : public Generator, public Triggerable{

}

如果我创建“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

最佳答案

虽然不是完全正确,但您可以将复合类视为2个彼此堆叠的独立对象。您第一个声明的地址是顶部(相同的地址),第二个声明的地址下面(因此具有不同的地址)。

08-27 15:24