В C ++ единственный способ сделать класс абстрактным - поместить в него хотя бы одну чисто виртуальную функцию.Компилятор не позволит вам создать экземпляр класса, который содержит чисто виртуальную функцию, потому что тогда у вас будет объект с функцией, у которой нет определения.Возможно, есть загадочные способы обойти это, но это стандартная практика.
Разница между чисто виртуальной и виртуальной функцией заключается в том, что чисто виртуальная функция не определяет реализацию метода.Синтаксис =0
сообщает компилятору, что класс не предоставляет определения для функции, что делает функцию чисто виртуальной и делает класс абстрактным.Любой класс, производный от абстрактного базового класса, должен определять чистую виртуальную функцию, иначе подкласс также будет абстрактным.
«Не чистая» виртуальная функция - это та, которая помечена ключевым словом virtual, ноопределение для функции предоставляется в базовом классе.Это означает, что базовый класс обеспечивает реализацию функции, которую любые подклассы могут переопределять при желании.Ключевое слово virtual позволяет полиморфизму работать, когда вы используете указатели базового класса, которые указывают на объекты производного класса.