таблица виртуальных методов для множественного наследования

Я читаю эту статьюТаблица виртуальных методов"

Пример в приведенной выше статье:

class B1 {
public:
  void f0() {}
  virtual void f1() {}
  int int_in_b1;
};

class B2 {
public:
  virtual void f2() {}
  int int_in_b2;
};

class D : public B1, public B2 {
public:
  void d() {}
  void f2() {}  // override B2::f2()
  int int_in_d;
};

B2 *b2 = new B2();
D  *d  = new D();

В статье автор вводит в память макет объектаd это так:

          d:
D* d-->      +0: pointer to virtual method table of D (for B1)
             +4: value of int_in_b1
B2* b2-->    +8: pointer to virtual method table of D (for B2)
             +12: value of int_in_b2
             +16: value of int_in_d

Total size: 20 Bytes.

virtual method table of D (for B1):
  +0: B1::f1()  // B1::f1() is not overridden

virtual method table of D (for B2):
  +0: D::f2()   // B2::f2() is overridden by D::f2()

Вопрос оd->f2(), Призыв кd->f2() проходитB2 указатель какthis указатель, поэтому мы должны сделать что-то вроде:

(*(*(d[+8]/*pointer to virtual method table of D (for B2)*/)[0]))(d+8) /* Call d->f2() */

Почему мы должны пройтиB2 указатель какthis указатель не оригиналD указатель??? На самом деле мы вызываем D :: f2 (). Исходя из моего понимания, мы должны пройтиD указатель какthis в функцию D :: f2 ().

___Обновить____

Если прохождениеB2 указатель какthis в D :: f2 (), что если мы хотим получить доступ к членамB1 класс в D :: f2 () ?? Я верюB2 указатель (это) показывается так:

          d:
D* d-->      +0: pointer to virtual method table of D (for B1)
             +4: value of int_in_b1
B2* b2-->    +8: pointer to virtual method table of D (for B2)
             +12: value of int_in_b2
             +16: value of int_in_d

У этого уже есть определенное смещение начального адреса этой непрерывной структуры памяти. Например, мы хотим получить доступb1 внутри D :: f2 (), я думаю, во время выполнения это будет выглядеть примерно так:*(this+4) (this указывает на тот же адрес, что и b2), который будет указыватьb2 вB????

Ответы на вопрос(2)

Ваш ответ на вопрос