f2 () вызывает ConnectToServer (), а метод f2 () определяется как COMPILE TIME .поскольку f2 () является частью CProject, а не ProjectService, у него есть две возможности:
1.Вызовите жестко запрограммированную виртуальную функцию из CProject
2.вызвать функцию из виртуальной таблицы.
, поскольку ConnectToServer () не является виртуальным, компилятор «выберет» первый вариант.
, как @Ozair сказал в первом комментарии (и его ответе): установка виртуального ключевого слова сделает функцию виртуальной, а компилятор «выберет» второй вариант, и будет вызван производный класс.
(обратите внимание, что функция вызывается из f2 (), поэтому компилятор не может точно определить, является ли этот экземпляр базовым или производным)