12. Наследование и полиморфизм | ООП 2025
Автор: Aleksey Malov
Загружено: 2025-06-09
Просмотров: 204
Лекция посвящена наследованию в C++ — одному из ключевых принципов объектно-ориентированного программирования. Разбираются основы иерархии классов, правила публичного наследования, порядок вызова конструкторов, использование виртуальных методов и деструкторов. Особое внимание уделено полиморфизму, приведению типов и практическим рекомендациям по проектированию иерархий классов.
Примеры кода и задачи можно найти в моём github-аккаунте: https://github.com/alexey-malov/oop
Чтобы оставаться на связи в условиях блокировки Youtube в России подписывайтесь на мой Telegram-канал https://t.me/vivid_coding
*1. Наследование: суть и иерархия*
Наследование позволяет создавать новые классы на основе существующих, повторно используя код.
Классы-наследники расширяют или переопределяют поведение базовых.
Иерархия оформляется как дерево: пример — `Shape → Circle`.
*2. Публичное наследование*
При публичном наследовании: `public` и `protected` сохраняют модификаторы доступа, `private` остаётся недоступным.
Наследник — частный случай базового класса.
*3. Конструкторы и инициализация*
Сначала вызывается конструктор базового класса.
Для передачи параметров родительскому конструктору используется список инициализации.
*4. Расширение и `using`*
Наследники могут добавлять методы и поля, а также наследовать конструкторы с помощью `using`.
*5. Полиморфизм и приведение типов*
Приведение вверх позволяет использовать наследника как родителя.
Полиморфизм даёт возможность вызывать разные реализации через единый интерфейс.
*6. Виртуальные методы*
Объявляются с `virtual`, переопределяются с `override`.
Механизм основан на таблице виртуальных функций (vtable).
Правило: если метод виртуальный — он остаётся таким во всех наследниках.
*7. Деструкторы*
Базовый класс должен иметь **виртуальный деструктор**, если предполагается полиморфное удаление.
Иначе — риск утечек и неопределённого поведения.
*8. Модификатор `protected`*
Доступен классу и его наследникам.
Лучше использовать `protected` методы, чем напрямую `protected` поля.
*9. Защищённые конструкторы*
Используются для ограничения создания экземпляров базового класса.
*10. Рекомендации*
Используйте `virtual` и `override` осознанно.
Не делайте всё виртуальным по умолчанию.
Инкапсуляцию лучше сохранять через `private` поля и `protected` интерфейс.
Тайм-коды:
0:00 Отношение наследования
10:05 Передача параметров конструктору родителя
16:04 Приведение типа в вверх по иерархии классов
21:43 Виртуальные методы, полиморфизм
33:46 Защищённые данные и методы класса
38:56 Применение защищённого конструктора
40:09 Работа деструкторов при наследовании
58:13 Финальные классы и методы
В заставке использована композиция "Папа может в Си" музыкального коллектива "Научно-технический рэп" (https://vk.com/nii_rap)
Исходный код шейдера из финальной заставки: https://www.shadertoy.com/view/Mcjfzc

Доступные форматы для скачивания:
Скачать видео mp4
-
Информация по загрузке: