Это делает функцию чисто виртуальной, а не виртуальной.
Реализация по умолчанию не предусмотрена, и предполагается, что реализация функции должна быть указана наследующим классом. Однако это можно переопределить.
Иногда вы видите законченные классы, в которых все функции-члены указываются как чисто виртуальные таким образом.
Это абстрактные базовые классы, иногда называемые интерфейсными классами, и разработчик ABC говорит вам: «Теперь я представляю, как эта функциональность будет реализована для всех специализаций этого базового класса. Но вы должны все это определено для вашей специализации, и вы знаете, как должен вести себя ваш объект ".
Редактировать: Упс, только что заметил тот факт, что чисто виртуальная функция члена является закрытой. (Спасибо, Майкл). Это немного меняет дело.
Когда этот базовый класс наследуется с использованием частного наследования, он меняет вещи. По сути, разработчик базового класса говорит, что когда ваш производный класс вызывает не базовую функцию в базовом классе. часть поведения была делегирована вашей специализации функции в вашем производном классе. Неприватный член делает «что-то», и часть этого «чего-то» является вызовом через вашу функцию чисто виртуального базового класса.
Таким образом, некоторая открытая функция в Foo вызывает функцию Bar внутри Foo, и она зависит от того факта, что вы предоставите специализированную реализацию функции Bar для вашего конкретного случая.
Скотт Мейерс называет это «реализованным в терминах».
Кстати, просто посмеиваясь над количеством ответов, которые были быстро удалены людьми, которые также не увидели «мелкий шрифт» в вопросе! (-:
НТН
ура