Загрузка...

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
Страницу в закладки Мои закладки
Все заметки Новая заметка Страницу в заметки

На информационно-развлекательном портале SALDA.WS применяются cookie-файлы. Нажимая кнопку Принять, вы подтверждаете свое согласие на их использование.

Об использовании CookiesПринять