В этом вопросе, если вы попытаетесь получить Sizeof класса A, он даст вам ответ «4», потому что A имеет только одну виртуальную функцию, поэтому его __vptr будет иметь значение «4».
Точно так же, если вы попытаетесь получить Sizeof класса B, он даст вам ответ «4», потому что B также имеет только одну виртуальную функцию, поэтому его __vptr будет иметь байт «4».
Но класс C наследует оба класса A и B, а сам C имеет виртуальную функцию. Таким образом, C получит 2 указателя __vptr, а для своей собственной виртуальной функции C будет использовать унаследованный __vptr.
Поэтому, если вы попытаетесь получить Sizeof класса C, он даст вам ответ «8», потому что C имеет два виртуальных указателя.
И, наконец, класс D наследует класс C, поэтому D будет использовать унаследованный __vptr для своей собственной виртуальной функции, и поскольку класс C имеет размер байта '8', поэтому sizeof D даст ответный байт '8'.