В dynamic binding
вызов функции связан с реализацией функции в зависимости от типа объекта, на который указывает указатель.
Предположим, у нас есть следующий код:
base *bptr = new derived;
bptr->func();
Пусть функция func
объявлена виртуальной в базовом классе.Тогда версия виртуальной функции func
производного класса будет вызываться во время выполнения из-за динамического связывания.
Я понимаю приведенную выше концепцию.
Но меня смутила следующая концепция, которую я изучил после изучения вышеуказанной концепции.
В приведенном фрагменте кода указательОбъект производного класса неявно преобразуется в указатель на объект базового класса.Тогда bptr
будет фактически указывать на подобъект базового класса объекта производного класса, а не указывать на объект производного класса.
Поскольку указатель базового класса bptr
указывает на подобъект базового классаво время выполнения не должна ли вызываться версия виртуальной функции базового класса func
?