Bar и Box являются производными классами от Foo, и у Foo есть виртуальная функция F(), а у Bar и Box есть функция F(). Насколько я понимаю, полиморфизм правильно позволяет Bar.F() вместо Box.F() или Box.F() вместо Bar.F() переопределять Foo.F() с помощью некоторой процедуры времени выполнения, не зная, является ли ваш объект Бар или Коробка. Это что-то вроде этого:
Foo * boxxy = new Box;
boxxy->F();
Последняя строка вызовет правильный F() (в данном случае Box.F()) независимо от того, является ли boxxy Box, Bar или Foo (в этом случае вызывается реализация виртуального Foo.F()). ).
Я правильно понимаю? А что изменится, если boxxy будет указателем Box? А что произойдет, если производный класс не имеет переопределения для F()? Наконец, чтобы избежать реализации функции для базового класса, но при этом разрешить полиморфизм, вы просто пишете пустое тело функции и объявляете его виртуальным? Спасибо.