Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Пособие-ООП - копия.doc
Скачиваний:
20
Добавлен:
17.08.2019
Размер:
907.78 Кб
Скачать

2.2Наследование. Лекция №8

Наследование - это порождение производных классов от базовых классов, причем производный класс наследует элементы базовых классов и имеет собственные элементы.

Производный класс

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

class cl3: atr1 cl1[, atr2 cl2]//cl1 - имя базового класса

{ //atr1 - атрибут наследования (private, public, protected)

... }

Атрибут наследования осуществляет управление доступом к элементам базового класса (наследуемым элементам) внутри производного класса и влияет на дальнейшее наследование. По умолчанию атрибут наследования - private.

Схема управления доступом в производном классе к наследуемым элементам показана в таблице 2.1.

Таблица 2.1. Изменение атрибутов доступа при наследовании.

Атрибут

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

Атрибут доступа

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

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

наследуемым элементам (по имени элем.)

private

private

protected

public

private, доступа нет варианты: 1

private, но доступ есть 2

private, но доступ есть 2

protected

private

protected

public

private, доступа нет 1

protected, доступ есть 3

protected, доступ есть 3

public

private

protected

public

private, доступа нет 1

protected, доступ есть 4

public, доступ есть 4

Как видно из таблицы, возможны следующие варианты доступа:

  • закрытые (private) элементы базового класса, независимо от атрибута наследования, становятся закрытыми (private) в производном классе, и к ним нет доступа в производном классе;

  • открытые (public) и защищенные (protected) элементы базового класса при наследовании private становятся закрытыми (private) в производном классе, но доступ к ним в производном классе есть; они становятся закрытыми от дальнейшего наследования;

  • открытые (public) и защищенные (protected) элементы базового класса при наследовании protected становятся эащищенными (protected) в производном классе;

  • открытые (public) и защищенные (protected) элементы базового класса при наследовании public становятся соответственно открытыми (public) и защищенными (protected) в производном классе.

Схема управления доступом на условном примере (см. таблицу 2.2).

Таблица 2.2. Пример осуществления доступа к элементам базового класса.

class cl1 //баз. класс

{

private: int a1; void x1();

protected: int b1;void y1();

public: int c1; void z1();

};

class cl2:public cl1//пр.кл

{

private: int a2; void x2();

protected: int b2;void y2();

public: int c2; void z2();

};

class cl3:private cl1//пр.кл

{

private: int a3; void x3();

protected: int b3;void y3();

public: int c3; void z3();

};

Прямой доступ в cl1:

a1, x1(), b1, y1(), c1, z1()

Прямой доступ в cl2:

b1, y1(), c1, z1(),

a2, x2(), b2, y2(), c2, z2()

Прямой доступ в cl3:

b1, y1(), c1, z1(),

a3, x3(), b3, y3(), c3, z3()

Доступ из внеш.функций

через объект (cl1 obj1):

c1, z1()

Доступ из внеш.функций

через объект (cl2 obj2):

c1, z1(), c2, z2()

Доступ из внеш.функций

через объект (cl3 obj3):

c3, z3()

Определение каждого класса размещают в отдельном файле заголовков. Тогда в файл заголовков производного класса директивой #include необходимо включить файл заголовков базового класса.