Какая разница между interface в С# и чисто виртуальными функциями в класах С++?
"Чисто виртуальными" бывают функции, не классы. Класс в котором присутствует хотя бы одна чисто виртуальная функция называется абстрактным. Иногда "чисто абстрактным" называют класс, в котором есть только чисто виртуальные функции + виртуальный деструктор. Такой класс действительно можно использовать как интерфейс, и он создан, чтобы работать как интерфейсы в других языках. Отличия минимальны, если они вообще есть.
Никакой, просто в варианте с виртуальными классами больше кода. Но по сути профит тот же, классы могут наследовать (имплементить) сразу несколько интерфейсов (виртуальных классов).