Sobes.tech
Назад к вопросам
Junior — Middle
86

Можете объяснить, что означает вызов виртуальной функции без реализации в базовом классе?

Ответ от нейросети

sobes.tech AI

В C++ вызов виртуальной функции без реализации в базовом классе означает, что эта функция объявлена как чисто виртуальная (pure virtual), то есть с помощью синтаксиса = 0 в объявлении. Это делает класс абстрактным, и объекты такого класса создать нельзя.

Если попытаться вызвать такую функцию напрямую из базового класса, где реализации нет, то программа либо не скомпилируется, либо, если вызов происходит через указатель/ссылку на производный класс, где функция реализована, вызов пойдет к реализации производного класса.

Пример:

class Base {
public:
    virtual void foo() = 0; // чисто виртуальная функция
};

class Derived : public Base {
public:
    void foo() override {
        std::cout << "Реализация в Derived" << std::endl;
    }
};

int main() {
    Derived d;
    Base* b = &d;
    b->foo(); // вызов реализованной функции Derived
}

Если же попытаться вызвать foo() внутри конструктора базового класса, где реализации нет, это приведет к ошибке времени выполнения, так как виртуальные вызовы в конструкторах не работают полиморфно.