12. Наследование и полиморфизм | ООП 2025
Лекция посвящена наследованию в 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
Видео 12. Наследование и полиморфизм | ООП 2025 канала Aleksey Malov
Примеры кода и задачи можно найти в моём 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
Видео 12. Наследование и полиморфизм | ООП 2025 канала Aleksey Malov
Комментарии отсутствуют
Информация о видео
9 июня 2025 г. 20:00:06
01:04:25
Другие видео канала