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

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

Подготовка к работе. По указанной литературе и конспекту лекций повторить тему «Множественное наследование».

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

Задание.

1. Используя класс, созданный в работе № 3, и класс №1, созданный в работе № 5, в качестве базовых, разработать с применением множественного наследования класс, наследующий свойства обоих базовых классов. Поля базовых классов должны иметь режим доступа, позволяющий наследовать их производным классом.

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

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

3. В функции main() создать объекты производного класса при помощи каждого из его конструкторов. Проверить работу конструкторов и деструктора производного класса. Проверить результат работы конструкторов с помощью функции вывода. Проверить порядок создания объектов производного класса по индикационным сообщениям конструкторов. Таким же образом проверить порядок разрушения объектов. (При необходимости использовать динамический объект, явно удаляемый операцией delete.) Сделать выводы.

4. В отчете по работе привести диаграмму иерархии классов.

Сохранить файл с тестом программы для последующих работ.

Контрольные вопросы.

  1. Что такое наследование?

  2. Что такое множественное наследование?

  3. Какие компоненты базовых классов могут быть унаследованы производными классами?

  4. Как меняется режим доступа к компонентам классов при наследовании?

  5. Каков формат указания базовых классов при создании производного класса?

  6. Как влияет спецификатор доступа, указываемый перед именем базового класса на режим доступа унаследованных компонент?

  7. Как графически может быть отображено отношение множественного наследования между классами?

  8. Что означает понятие «прямой базовый класс»?

  9. Почему базовые классы иногда называют «суперклассами»?

  10. Сколько прямых базовых классов может быть у производного класса?

  11. Может ли один и тот же класс быть несколько раз прямым базовым классом при создании производного класса?

  12. Наследуются ли производными классами конструкторы и деструкторы?

  13. Как организуется взаимодействие конструкторов производного и базовых классов?

  14. Что означает понятие «непрямой базовый класс»?

  15. Может ли один и тот же класс быть несколько раз непрямым базовым классом при создании производного класса?

  16. Может ли один и тот же класс быть одновременно прямым и непрямым базовым классом при создании производного класса?

  17. В каком порядке создается объект производного класса?

  18. Каков порядок указания классов в списке базовых?

Лабораторная работа №7

Виртуальное наследование

Подготовка к работе. По указанной литературе и конспекту лекций повторить темы «Множественное наследование», «Виртуальные базовые классы».

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

Задание.

1. На основе класса, созданного в работах № 1 – № 4, и класса №1, созданного в работе № 5, разработать с применением множественного наследования класс, наследующий свойства обоих базовых классов.

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

3. В отчете по работе привести диаграмму иерархии классов. По диаграмме выбрать базовый класс (один или, возможно, несколько), для которого наиболее оптимальным будет виртуальное наследование. Изменить списки базовых классов в необходимых местах текста программы так, чтобы реализовывалось виртуальное наследование.

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

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

6. В функции main() создать объекты каждого из новых (не использовавшихся в предыдущих работах) производных классов при помощи конструкторов с аргументами. Проверить работу конструкторов и деструкторов производных класса. Проверить результат работы конструкторов с помощью функций вывода. Проверить порядок создания объектов производных классов по индикационным сообщениям конструкторов. Таким же образом проверить порядок разрушения объектов. (При необходимости использовать динамический объект, явно удаляемый операцией delete.) Сделать выводы.

7. С помощью операции sizeof получить размер объекта самого нижнего в иерархии производного класса. Удалить спецификаторы virtual из списков базовых классов. При необходимости изменить имена компонентов класса для устранения неоднозначности. Ещё раз получить размер объекта этого же производного класса. Проверить порядок создания объектов производных классов по индикационным сообщениям конструкторов. Сделать выводы.

Сохранить файл с тестом программы для последующих работ.

Контрольные вопросы.

  1. Что такое наследование?

  2. Что такое множественное наследование?

  3. Что такое виртуальное наследование? В каких случаях оно применяется?

  4. Как в программах реализуется виртуальное наследование?

  5. Влияет ли виртуальность базового класса на структуру этого класса?

  6. Можно ли использовать виртуальное наследование при обычном (не множественном) наследовании? Оправданно ли в этом случае применение виртуального наследования?

  7. Что означает понятие «прямой базовый класс»?

  8. Что означает понятие «непрямой базовый класс»?

  9. Сколько прямых базовых классов может быть у производного класса?

  10. Может ли один и тот же класс быть несколько раз непрямым базовым классом при создании производного класса?

  11. Может ли один и тот же класс быть одновременно прямым и непрямым базовым классом при создании производного класса?

  12. Для чего используется спецификатор virtual при наследовании?

  13. Что означает понятие «подобъект базового класса»?

  14. Чем отличается внутренняя структура объекта производного класса при обычном множественном наследовании и виртуальном множественном?

  15. Как влияет виртуальное наследование на размер объекта производного класса?

  16. Что означает понятие «иерархия классов»?

  17. Как графически может быть отображено отношение виртуального множественного наследования между классами?

Лабораторная работа №8

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]