Виртуальное наследование c++. Ромбовидное наследование c++. Изучение С++ для начинающих. Урок #114

YOUTUBE · 19.11.2025 07:29

Ключевые темы и таймкоды

Введение

0:01
  • Приветствие от Сергея.
  • Тема урока: ромбовидное и виртуальное наследование в C++.
  • Связь между этими темами и особенности множественного наследования.

Структура классов

0:51
  • Описание структуры наследуемых классов в программе.
  • Базовый класс Component с полем для производителя компонента.
  • Конструкторы классов выводят сообщения для отслеживания вызовов.

Классы GPU и Memory

1:47
  • Класс GPU наследуется от Component.
  • Конструктор GPU принимает название производителя.
  • Класс Memory также наследуется от Component.

Класс GraphicsCard

2:41
  • GraphicsCard наследуется от GPU и Memory.
  • В конструкторе GraphicsCard передаются отдельные названия производителей для GPU и Memory.

Порядок вызова конструкторов

4:34
  • Финальный объект GraphicsCard вызывает конструкторы своих предков.
  • GPU вызывает конструктор Component.
  • Memory также вызывает конструктор Component.

Структура финального объекта

6:27
  • Финальный объект GraphicsCard содержит GPU и Memory, которые в свою очередь содержат Component.
  • Это позволяет указать отдельные фирмы-производители для каждого компонента.

Заключение

7:26
  • Текущая схема наследования полезна для указания отдельных фирм-производителей.
  • Возможность получения значений полей производителя у каждого объекта.

Проблема дублирования данных

8:18
  • В MMO-игре разрабатываются классы персонажей: орк, эльф, маг.
  • Каждый персонаж имеет поле HP для хранения количества хит-пойнтов.
  • Класс орка наследуется от класса персонажа, а класс воина — от класса персонажа.

Дублирование данных о HP

9:31
  • При создании класса «орк-воин» конструкторы предков вызывают конструкторы базового класса «персонаж».
  • Данные о HP дублируются, что создаёт проблему при подсчёте оставшихся хит-пойнтов.
  • Необходимо избежать дублирования данных о HP.

Ромбовидное наследование

11:25
  • Ромбовидное наследование позволяет избежать дублирования данных.
  • Диаграмма наследования должна выглядеть как ромбик: «орк-воин» наследуется от «орка» и «воина», а «орк» и «воин» — от «персонажа».
  • Каждый класс должен иметь только один общий объект-предок.

Виртуальное наследование

12:20
  • Для реализации ромбовидного наследования используется виртуальное наследование.
  • Ключевое слово «virtual» в модификаторах наследования позволяет классам ссылаться на один и тот же экземпляр базового класса.
  • Конструктор базового класса вызывается только один раз, что предотвращает дублирование данных.

Применение виртуального наследования

13:19
  • Виртуальное наследование позволяет избежать проблем с дублированием данных.
  • Выбор между виртуальным и обычным наследованием зависит от конкретной ситуации и требований проекта.

Заключение

14:30
  • Автор благодарит зрителей за внимание и призывает подписаться на канал для получения новых уроков по программированию.