Виртуальные функции в языке программирования 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 "

Тема: a b c
Java Map - удобный инструмент для работы с коллекциями в Java
Как в HTML поменять цвет текста
Quill: карандаш, который меняет мир
Замена в Python
Print Post Com - онлайн печать постеров для всех
Build Prop - настройка и оптимизация планируемого строительства
Глубокое копирование объектов в Python
Оператор pow() в языке C: работа с возведением в степень
Json.NET (Newtonsoft) – библиотека для работы с форматом JSON