все понял, виртуал (чисто виртуальные функции) вообще не выносятся
Почему же. Выноси на здоровье. virtual является частью объявления, т.е. прототипа. Чтобы компилер проапдейтил структуру VMT. В определении virtual делать нечего, адрес метода в VMT линкер запишет.