Когда вы вызываете fun()
в конструкторе базового класса, производный класс еще не был создан (в C ++ сначала создаются классы родительского класса), поэтому в системе еще нет экземпляра Derived и, следовательно, нет записи втаблица виртуальных функций для Derived::fun()
.
Это причина, по которой вызовы виртуальных функций в конструкторах обычно не одобряются, если вы не специально хотите вызвать реализацию виртуальной функции, которая либочасть объекта, который в данный момент создается, или часть одного из его предков.