-2

クラス A を継承するクラス B がある場合、以下に出力される 2 つの値は異なる可能性があります。なんで?

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

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

1 に答える 1

2

以下に出力される2つの値は異なる場合があります。なんで?

AそれがのベースでありB、割り当てが有効であると仮定すると、それがの唯一のベースではない可能性があります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)) );
}
于 2012-06-11T15:20:55.913 に答える