B переопределяет функцию who () своего родителя A. Это называется полиморфизмом.C наследуется от B, но ничего не переопределяет;таким образом, он использует всю реализацию B. p является указателем на объект класса A. Одна из ключевых особенностей наследования класса состоит в том, что указатель на производный класс совместим по типу с указателем на его базовый класс [1].
Это означает, что когда вы вызываете функцию-член указателя (p-> who ()), а класс объекта, на который указывает указатель, переопределяет член его родителя, происходитиспользовать переопределенный член.
Источники: [1] http://www.cplusplus.com/doc/tutorial/polymorphism/