Жизненно важной функцией является функция, которая является наследуемой и переопределяемой функцией, которая будет поддерживать динамическую диспетчеризацию.В идеале это то, что мы называем полиморфизмом во время выполнения.Короче говоря, виртуальная функция предоставляет целевую функцию для выполнения, о которой мы не знаем во время компиляции.Предположим, что вы расширяете класс, имеющий виртуальную функцию, вы получаете возможность использовать полиморфизм для выполнения функции в классе наследования, используя указатель базового класса.
Подробнее читайте в https://www.geeksforgeeks.org/virtual-functions-and-runtime-polymorphism-in-c-set-1-introduction/
Чистая виртуальная функция или чисто виртуальный метод - это виртуальная функция, которая должна быть реализована производным классом, если производный класс не является абстрактным.
Следует отметить, чтоЕсли у вас есть чисто виртуальная функция в классе, вы не можете создать ее экземпляр как объект.
посмотрите на следующий пример
class Base {
public:
virtual string getType() = 0;
}
class Derived : public base {
public:
string getType();
}
string
derived::getType() {
//do necessary stuff <------------------ (1)
}
Base* myBase = new Derived(); // OK
myBase->getType() //this will call the logic at (1).That's in the derived class but not base
Base* myBase2 = new Base();//Error
И на ваш вопрос, pure virtualФункция является декларацией. И не нуждается в определении.
* РЕДАКТИРОВАТЬ Вы можете предоставить реализацию по умолчанию, но вы должны переопределить в производных классах этого базового класса чисто виртуальную функцию *