Виртуальные функции в языке программирования C

Виртуальные функции в С++ - это мощный механизм, позволяющий реализовывать полиморфизм и динамическую связь объектов. Они позволяют вызывать функции базового класса через указатель на объект производного класса.

В языке С++, когда объект производного класса является указателем на базовый класс, вызов виртуальной функции происходит на основе реального типа объекта, а не на основе типа указателя. Это позволяет обрабатывать объекты различных типов, без явного указания на их конкретные типы.

Пример кода:


#include <iostream>

class Shape {
public:
    virtual void draw() {
        std::cout << "Рисуем фигуру" << std::endl;
    }
};

class Circle : public Shape {
public:
    void draw() override {
        std::cout << "Рисуем круг" << std::endl;
    }
};

class Square : public Shape {
public:
    void draw() override {
        std::cout << "Рисуем квадрат" << std::endl;
    }
};

int main() {
    Shape* shape = new Circle();
    shape->draw();  // Выводит "Рисуем круг"

    Shape* shape2 = new Square();
    shape2->draw();  // Выводит "Рисуем квадрат"

    delete shape;
    delete shape2;
    
    return 0;
}

В данном примере мы создаем 3 класса: Shape, Circle и Square. Класс Shape - базовый класс, а классы Circle и Square являются производными от него. В базовом классе есть виртуальная функция draw(), которую мы переопределяем в производных классах.

В функции main() мы создаем указатели на объекты классов Circle и Square, которые присваиваем указателю на базовый класс Shape. Затем, при вызове функции draw() через указатель, происходит вызов соответствующей функции для реального типа объекта.

В результате, при вызове функции draw() через указатель shape, объект Circle будет использовать свою реализацию функции draw() и выведет "Рисуем круг". Аналогично, при вызове функции draw() через указатель shape2, объект Square будет использовать свою реализацию функции draw() и выведет "Рисуем квадрат".

Таким образом, виртуальные функции в С++ позволяют работать с объектами различных типов через указатель на базовый класс, что упрощает и увеличивает гибкость работы с объектами и их наследованием. Они являются неотъемлемой частью полиморфизма и динамической связи в С++.

Похожие вопросы на: "виртуальные функции c "

Динамический массив с
GTK: основы и примеры использования
Квалификация и реквизиты - сайт на тему "credentials"
Использование функции sprintf в C для форматирования строк
Размеры данных в Си: функция sizeof
SharpDevelop - удобная и бесплатная IDE для .NET
Создание Gmail: простой и бесплатный способ начать общаться
include iostream: что это?
Функции в языке C
Java extends - наследование и расширение классов