Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Метод_лаб_9.doc
Скачиваний:
0
Добавлен:
01.07.2025
Размер:
310 Кб
Скачать
☆

Наследование

Наследование – принцип ООП, который позволяет на основе одного класса объявить другой класс. Наследование используется для поддержки ООП.

При наследовании:

  • класс-предок (родитель, порождающий класс);

  • класс-наследник (потомок, порожденный класс).

В С++ порождающий класс называется базовым, а порожденный – производным.

Каждый производный класс может выступать базовым классом.

Отношения между родительским классом и его потомками называются иерархией наследования. Глубина наследования не ограничена.

Простым называется наследование, при котором производный класс имеет только одного родителя.

Множественное наследование – способность класса наследовать характеристики более чем одного базового класса.

Объекту базового класса можно присвоить значение другого объекта этого же класса, а также любого объекта-потомка.

Указатель и ссылка на базовый класс совместимы по типам соответственно с указателем и ссылкой на производный класс.

Синтаксис объявления производного класса

Простое наследование:

class имя_производного_Класса:

[спецификатор наследования] имя_базового класса

{

тело класса

};

Множественное наследование:

class имя_производного_Класса:

[спецификатор наследования1] имя_базового класса1,

[спецификатор наследования2] имя_базового класса2,

...

{ тело класса };

Спецификатор наследования определяет доступность элементов базового класса в производном классе.

Если спецификатор наследования не указан, то по умолчанию базовый класс наследуется как закрытый.

Имеются 3 спецификатора наследования:

  • Public (открытый)

  • Private (закрытый)

  • Protected (защищенный )

Если спецификатор наследования public, все открытые компоненты и функции-члены интерфейса базового класса открыты и в производном классе, а закрытые – закрыты и недоступны.

Если спецификатор наследования private, все открытые компоненты и функции-члены интерфейса базового класса закрыты в производном классе, также как и закрытые – закрыты и недоступны. Личные (private) члены базового класса доступны в производном классе только через вызов соответствующих функций-членов базового класса.

Спецификатор наследования protected эквивалентен спецификатору private с единственным исключением: защищенные члены базового класса доступны для членов всех производных классов этого базового класса, вне базового или производных классов защищенные члены недоступны.

Доступ к элементам базового класса в классе-наследнике

Доступность элементов базового класса из классов-наследников изменяется в зависимости от спецификаторов доступа в базовом классе и спецификатора наследования.

Спецификатор доступа

в базовом классе

Спецификатор наследования

Доступ в производном классе

public

отсутствует

private

public

private

private

public

public

public

public

protected

protected

protected

отсутствует

private

protected

private

private

protected

public

protected

protected

protected

protected

private

отсутствует

недоступны

private

private

недоступны

private

public

недоступны

private

protected

недоступны