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