Wirtualne tabele i układ pamięci w wielu wirtualnych dziedziczeniach

Rozważ następującą hierarchię:

struct A {
   int a; 
   A() { f(0); }
   A(int i) { f(i); }
   virtual void f(int i) { cout << i; }
};
struct B1 : virtual A {
   int b1;
   B1(int i) : A(i) { f(i); }
   virtual void f(int i) { cout << i+10; }
};
struct B2 : virtual A {
   int b2;
   B2(int i) : A(i) { f(i); }
   virtual void f(int i) { cout << i+20; }
};
struct C : B1, virtual B2 {
   int c;
   C() : B1(6),B2(3),A(1){}
   virtual void f(int i) { cout << i+30; }
};

Co jestdokładny układ pamięciC instancja? Ile zawiera punktów, gdzie dokładnie znajduje się każdy z nich? Które wirtualne tabele są współdzielone z wirtualną tabelą C? Co dokładnie zawiera każdy wirtualny stół?

Tutaj rozumiem układ:

----------------------------------------------------------------
|vptr1 | AptrOfB1 | b1 | B2ptr | c | vptr2 | AptrOfB2 | b2 | a |
----------------------------------------------------------------

gdzieAptrOfBx jest wskaźnikiem doA na przykładBx zawiera (ponieważ dziedziczenie jest wirtualne).
Czy to jest poprawne? Jakie funkcjevptr1 punkty dla? Jakie funkcjevptr2 punkty dla?

Podany następujący kod

C* c = new C();
dynamic_cast<B1*>(c)->f(3);
static_cast<B2*>(c)->f(3);
reinterpret_cast<B2*>(c)->f(3);

Dlaczego wszystkie połączenia dof wydrukować33?

questionAnswers(2)

yourAnswerToTheQuestion