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