继承的差异

Differences in Inheritance

本文关键字:继承      更新时间:2023-10-16

如果您有从类 A 继承的类 B,下面打印的两个值可能会有所不同。为什么?

B *myPointer = new B();
A *myOtherPointer = myPointer;
printf(“%x”, myPointer);
printf(“%x”, myOtherPointer);

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

假设AB的基数,因此赋值有效,它可能不是B的唯一基数(特别是它可能不是第一个基数),在这种情况下,将有一个偏移量:

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)) );
}