4. Наследование в С++.
Построение иерархии классов. Выделение общей части группы классов. Расщепление классов.
Наследование
Наследование — это один из фундаментальных принципов объектно-ориентированного программирования (ООП), который позволяет создавать новые классы на основе уже существующих. Это упрощает создание сложных систем, повторно используя код и избегая избыточности.
Построение иерархии классов
Базовые и производные классы
Базовый класс (суперкласс) предоставляет общие характеристики, которые могут быть унаследованы другими классами.
Производный класс (подкласс) расширяет или модифицирует функциональность базового класса.
Типы наследования
public
: открытое наследование, при котором всеpublic
иprotected
члены базового класса сохраняют свои уровни доступа в производном классе.protected
: защищенное наследование, при которомpublic
члены становятсяprotected
в производном классе.private
: закрытое наследование, при котором всеpublic
иprotected
члены становятсяprivate
в производном классе.
Выделение общей части группы классов
Абстрагирование общих черт
Определение общих характеристик и поведения в базовом классе, которые будут использоваться всеми производными классами.
Это способствует повторному использованию кода и упрощает модификацию.
Преимущества выделения общей части
Уменьшение дублирования кода: общие методы и свойства определяются один раз в базовом классе.
Упрощение поддержки и расширения кода: изменения в базовом классе автоматически применяются к производным классам.
Расщепление классов
Определение расщепления
Расщепление (деление) классов предполагает разделение одного класса на несколько специализированных подклассов.
Это помогает поддерживать код более организованным и облегчает его понимание.
Пример расщепления классов
Рассмотрим класс, который сначала включает в себя множество различных методов и свойств, но затем разбивается на более специализированные классы.
Преимущества расщепления классов
Улучшение управляемости кода: меньшие, специализированные классы проще понимать и поддерживать.
Повышение гибкости: изменения в одном из специализированных классов не влияют на другие.
Неявное преобразование
ВАЖНО! В языке С++ происходит неявное преобразование от указателя объекта производного класса к указателю на объект базового класса. То же самое касается ссылок.
Рассмотрим пример ниже:
Last updated