Скачиваний:
327
Добавлен:
28.03.2021
Размер:
378.53 Кб
Скачать

42. Общее, частное и защищенное наследование. Комбинации атрибутов доступа при наследовании. Выбор атрибута доступа при наследовании. Уровни наследования. Множественное наследование.

Общее наследование: При общем наследовании порожденный класс имеет доступ к наследуемым членам базового класса с видимостью public и protected. Члены базового класса с видимостью private – недоступны. Общее наследование означает, что дочерний класс  – это подтип базового класса. Таким образом, дочерний класс представляет собой модификацию базового класса, которая наследует общие и защищенные члены базового класса. (Модификатор «public», обозначает, что это общее наследование)

Реализация механизма общего наследования: class grad_student : public student

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

Внутри класса

В дочернем классе

Вне класса

private

+

-

-

protected

+

+

-

public

+

+

+

Частное наследование: Дочерний класс может быть базовым для следующего наследования. При наследовании private наследуемые члены базового класса, объявленные как protected и public, становятся членами дочернего класса с видимостью private. При этом члены базового класса с видимостью public и protected становятся недоступными для дальнейшего нследования. Цель такого наследования — скрыть классы или элементы классов от использования их в следующих дочерних классах. 

Атрибуты доступа класса:

Public — доступ открыт всем, кто видит определение данного класса.

Protected — доступ открыт классам, производным от данного. То есть, производные классы получают свободный доступ к таким свойствам или метода. Все другие классы такого доступа не имеют.

Private — доступ открыт самому классу (т.е. функциям-членам данного класса) и друзьям (friend) данного класса - как функциям, так и классам. Однако производные классы не получают доступа к этим данным совсем. И все другие классы такого доступа не имеют

Используя public-наследование мы передаем потомкам всё, что есть в основном классе, в таком виде, как и записано в основном классе. Получаем клон основного класса. Разница в том, что элементы основного класса к элементам своего клона отношения не имеют. 

Используя private-наследование можно создать первого потомка, от которого дальнейшее наследование будет бессмысленно. Если первый потомок получает возможность работы с некоторыми элементами, переданными по механизму наследования, то потомки первого потомка таких возможностей не получают. 

Использованием protected-наследования программистом предполагается, что внутри всех потомков и потомков потомков и потомков потомков потомков будут использоваться только такие элементы, передаваемые механизмом наследования, которые будут защищены от влияния на себя извне своих классов.

Если порожденный класс наследует элементы одного базового класса, то такое наследование называется одиночным. Однако, возможно и множественное наследование. Множественное наследование позволяет порожденному классу наследовать элементы более, чем от одного базового класса. 

Наличие у производного класса более чем одного непосредственного базового класса называется множественным наследием. Синтаксически множественное наследование отличается от единичного наследования списком баз, состоящим более чем из одного элемента.

Синтаксис: Class A: public B, public C {…};