77.32K
Категория: ПрограммированиеПрограммирование

Виртуальные функции

1.

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

2.

#include <iostream>
Пример:
Здесь display() - виртуальный метод в
базовом классе Base, который затем
переопределён в производном
классе Derived. Виртуальные методы
позволяют использовать указатели и
ссылки на базовый класс для работы
с объектами производных классов с
использованием полиморфизма.
class Base {
public:
// Виртуальный метод
virtual void display() {
cout << "Это базовый класс.\n";
}
};
class Derived : public Base {
public:
// Переопределение виртуального метода
void display() override {
cout << "Это производный класс.\n";
}
};
int main() {
Base baseObj;
Derived derivedObj;
// Вызов виртуального метода
baseObj.display(); // Выводит: "Это базовый класс."
derivedObj.display(); // Выводит: "Это производный класс."
// Указатель на базовый класс, который указывает на объект производного класса
Base* ptr = &derivedObj;
ptr->display(); // Выводит: "Это производный класс."
return 0;
}
2

3.

Синтаксис:
class Base {
public:
virtual void virtualFunction() {
Сперва с помощью ключевого слова
Virtual объявляется виртуальная
функция. После чего имя и
прописывается базовая инструкция.
В дальнейшем мы используем
исключительно само имя функции и
ключевое слово override, после чего
прописываем другие инструкции для
нашей функции.
// Тело виртуальной функции
}
// Дополнительные члены класса
};
class Derived : public Base {
public:
void virtualFunction() override {
// Новая реализация виртуальной функции в производном
классе
}
3
// Дополнительные члены класса
};

4.

Положительны
еи
отрицательные
стороны.
Плюсы:
Полиморфизм: Виртуальные
функции обеспечивают
полиморфизм, что означает, что
одинаковые вызовы функций
могут выполнять различный код
в зависимости от типа объекта
во время выполнения
программы.
Расширяемость: Виртуальные
функции делают код более
расширяемым. Вы можете
добавлять новые классы,
производные от базового, и
переопределять виртуальные
функции для предоставления
новой функциональности без
изменения существующего
кода.
Интерфейс: Виртуальные
функции могут служить основой
для создания интерфейсов,
позволяющих создавать классы
с общим интерфейсом, но с
различной реализацией.
Минусы:
Накладные расходы: Использование
виртуальных функций может
привести к небольшим накладным
расходам на время выполнения из-за
дополнительных механизмов
динамического связывания.
Сложность понимания кода:
Виртуальные функции могут
усложнить понимание кода,
особенно в больших программах.
Иногда сложно отследить, какая
именно реализация будет вызвана в
конкретный момент времени.
Необходимость виртуальных
деструкторов: Если у вас есть
виртуальные функции, часто
требуется иметь также виртуальный
деструктор, чтобы гарантировать
правильное освобождение ресурсов
при удалении объектов.
4
English     Русский Правила