この疑いを持ったとき、私は C++ オブジェクトについて読んでいました。2つのクラスがあるとします
class X
{
virtual int def() { };
}
class Y
{
virtual int abc() { };
}
class Z : public X,public Y
{
virutal int abc() { return a };
int a;
}
今私が理解しているのは、Y と Z の両方が Z::abc() への参照を仮想テーブルに持っていることで、呼び出す正しい関数を解決するのに役立ちます。検討
Y *y = new Z;
Z *z = new Z;
y->abc() // I understand this is done by reaching the vptr of y by this = this + sizeof (X)
and z->abc() // z has its own vptr reachable
私の理解では、どちらの場合も「this」ポインターが渡され、呼び出す正しい abc() を見つけた後、プログラムはどのようにして int 値「a」に到達するのでしょうか?
渡されたオブジェクトの型に基づいて、コンパイラはどのように "int a" のアドレスを正しく計算しますか?