Важное правило, которое следует помнить, - это когда функция объявляется виртуальной, функции с совпадающими сигнатурами в производных классах всегда являются виртуальными. Таким образом, он переопределяется для Child of A и Child of B, которые будут вести себя одинаково (за исключением того, что вы не можете напрямую создать экземпляр BaseA).
Однако с C функция не переопределяется, а перегружается. В этой ситуации имеет значение только статический тип: он будет вызывать его на то, на что он указывает (статический тип), а не на то, чем на самом деле является объект (динамический тип)