Я немного смущен о vptr и представлении объектов в памяти, и надеюсь, что вы можете помочь мне лучше понять суть.
-
Рассмотрим
B
наследует отA
и обе определяют виртуальные функцииf()
. Из того, что я узнал, представление объекта класса B в памяти выглядит так:[ vptr | A | B ]
иvtbl
, который указываетvptr
, содержитB::f()
. Я также понял, что отбрасывание объекта отB
доA
ничего не делает, кроме игнорирования частиB
в конце объекта. Это правда? Разве это не так? Мы хотим, чтобы этот объект типаA
выполнял методA::f()
, а неB::f()
. -
Есть ли число
vtables
в системе как число классов? -
Как будет выглядеть класс
vtable
класса, который наследуется от двух или более классов? Как будет отображаться объект C в памяти? -
То же, что и вопрос 3, но с виртуальным наследованием.