クラス A を継承するクラス B がある場合、以下に出力される 2 つの値は異なる可能性があります。なんで?
B *myPointer = new B();
A *myOtherPointer = myPointer;
printf(“%x”, myPointer);
printf(“%x”, myOtherPointer);
クラス A を継承するクラス B がある場合、以下に出力される 2 つの値は異なる可能性があります。なんで?
B *myPointer = new B();
A *myOtherPointer = myPointer;
printf(“%x”, myPointer);
printf(“%x”, myOtherPointer);
以下に出力される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)) );
}