Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Ответы на экзаменационные вопросы.doc
Скачиваний:
110
Добавлен:
01.05.2014
Размер:
583.17 Кб
Скачать

Возможности прямого доступа к членам базового класса, обусловленных только размещение в секциях базового класса и вложением видимости.

Размещение чл. в

секциях базового

класса

Вид клиента

Открытая секция

Защищенная секция

Закрытая секция

Функции-члены базового класса

имеют

имеют

имеют

Функции-члены производного класса

имеют

имеют

не имеют

Функции вне базового и вне производного классов

имеют

не имеют

не имеют

  1. На возможности прямого доступа к членам базового класса существенное влияние оказывают спецификаторы доступа.

Трансформация секций базового класса, обусловленная видом наследования.

Размещение чл. в

секциях базового

класса

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

Открытая секция

Защищенная секция

Закрытая секция

Открытое наследование

открытая

защищенное

нет доступа

Защищенное наследование

защищенное

защищенное

нет доступа

Закрытое наследование

закрытое

закрытое

нет доступа

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

Пример.

void Square:: MoveToPoint(Point Q)

{

Point::MoveToPoint(Q);

}

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

  2. Спецификатор наследования public сохраняет статус в производном классе членов открытых и защищенных секций базового класса.

  3. Пользователь производного класса может использовать вызов открытые члены базового класса обращаться к объектам производного класса. Производный класс, рассматриваемый как тип, является почти подтипом типа базового класса.

Тип является подтипом некоторого типа тогда и только тогда, когда объекты подтипа являются объектами типа.

В С++ указатель или ссылка на объект производного класса м.б. автоматически преобразован в указатель или ссылку базового класса. Автоматически – без прямых действий программиста по контексту использования.

Открытое наследование реализует правило подстановки на уровне указателей или ссылок.

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

Защищенное и закрытое наследование требуют большей квалификации программиста.

Открытое наследование более соответствует модели ООП.

  1. Защищенное наследование переводит открытые и защищенные секции базового класса в защищенные секции производного класса, тем обеспечивая прямой доступ таких секций базового класса со стороны наследников, закрывая прямой доступ пользователям производного класса.

  2. Закрытое наследование переводит открытые и защищенные секции базового класса в закрытые секции производного класса. Такое наследование оставляет прямой доступ членам производного класса и закрывает его для пользователей и наследников производного класса.

  3. Защищенное и закрытое наследование делает недействительным отношение подстановки объекта производного класса вместо объекта базового класса.

  4. Уровень доступа к члену базового класса со стороны производного класса м.б. восстановлен до уровня, установленного в базовом классе.

class Point

{

Int x; int y;

public:

MoveToPoint(Point Q);

// эта функция будет нужна в производном классе, а остальные не нужны

}

class Square: private Point

{

unsigned int w;

public:

Point:: MoveToPoint;

}

Задание 17.

Теоретически и практически ответить на вопрос: если базовый класс имеет несколько функций с одним именем, о сколько восстановлений уровня доступа нужно написать? А если функции находятся в различных секциях базового класса?

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

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

34. Реализация сценариев наследования в классах языка С++.

  1. Наследование предназначено для создания нового класса на основе существующих, т.о. наследование является средством повторного использования.

  2. В концептуальной модели ООП в класс наследник передаются все атрибуты и все методы класса родителя. А так же м.б. добавлены в класс наследник свои методы и атрибуты. В С++ имеются большие возможности для создания нового класса путем наследования.

  3. В большинстве случаев новые классы создаются путем специализации существующих.

  4. При создании новых классов с помощью наследования м.б. использованы и практически используются два подхода.

  • Первый подход состоит в том, что базовый класс используется только для создания нового производного класса, при это использование фрагментов программы, которые были рассчитаны на использование объектов базового класса во внимание не принимаются.

  • Второй: производный класс создается на основе базового класса и при этом стремимся использовать фрагменты программы созданной для объектов базового класса для объектов производного класса.

  1. При построении производного класса на С++ можно управлять:

  • Набором используемых членов базового класса

  • Переопределением функций базового класса

  • Доступом к членам базового класса.

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

  • Обобщенные сценарии могут строиться с учетом:

    • Комбинации значений количества членов, количества переопределенных функций, количества используемых уровней доступа.

    № секции

    Количество членов базового класса используемых в производном классе (все, часть, ни одного)

    Количество переопределенных функций (все, часть, ни одной)

    Количество измененных уровней доступа

    Ссылка на примеры

    Зачем нужна эта таблица, я не знаю.