继承的差异

时间:2012-06-11 15:08:12

标签: c++ inheritance

如果您的B类继承自A类,则下面打印的两个值可能不同。为什么呢?

B *myPointer = new B();
A *myOtherPointer = myPointer;

printf(“%x”, myPointer);
printf(“%x”, myOtherPointer);

1 个答案:

答案 0 :(得分:2)

  

下面打印的两个值可能不同。为什么呢?

假设AB的基础,以便分配有效,它可能不是B的唯一基础(特别是它可能不是第一个 base),在这种情况下会有一个偏移量:

struct A { int x; };
struct A_ { int y; }
struct B : A_, A {};
int main() {
   B b;
   assert( static_cast<void*>(&b) != static_cast<void*>(static_cast<A*>(&b)) );
}

此外,如果继承关系是虚拟的,那么它们也不会从同一地址开始:

struct A {};
struct B : virtual A {};
int main() {
   B b;
   assert( static_cast<void*>(&b) != static_cast<void*>(static_cast<A*>(&b)) );
}