Wirtualne dziedziczenie jest realizowane w różny sposób w zależności od kompilatora.
1) Tak, zarówno vc, jak i gcc używają wskaźnika vTable. Ale vc ma inny wskaźnik ref jako wirtualny wskaźnik bazowy.
2) W przypadku klasycznego wirtualnego dziedziczenia, np. Left < Top; Right < Góra; Dno < lewy i prawy Stos powinien być tak:
Left.vptr // -> to its vtable
Left::element_in_left
Right.vptr
Right::element_in_right
Bottom::element_in_bottom
Top::element_in_top
Programy używać vptr znaleźć vtable dla gcc, nie jest wirtualny bazowa wartość offsetu w rentowne. vptr + offset bazy daje adres nadrzędny.
3) Nie jestem pewien co masz na myśli. Istnieją różne sposoby jego implementacji w kompilatorach C++. Inne języki mają swoje sposoby łączenia funkcji.
Określanie implementacji. – ildjarn
Jest to zależne od implementacji, pod względem ściśle technicznym jest * Niespecyficzne *, standard C++ opisuje jedynie zachowanie wirtualnego dziedziczenia, ale nie określa sposobu jego implementacji. Zostało pominięte jako szczegół dla implementacji i nie są potrzebne do określenia tego szczegółu.Oczywiście, że większość (* odczytuje wszystkie znane *) kompilatorów używa wirtualnego mechanizmu tabeli i wskaźnika. –
Powiedziawszy to powyżej, nie myśl, że Q jest nieistotny lub wcale nie jest prawdziwy. Wszystkie kompilatory używają podobnego mechanizmu i chociaż nie trzeba znać szczegółów implementacji, nie zaszkodzi to poznać. Ponadto, ten Q jest pytany tyle razy, że byłoby to dobre C++ - faq, jeśli ktoś zabiera czas i odpowiada na nie w przekonujący sposób. –