Главная страница Случайная страница КАТЕГОРИИ: АвтомобилиАстрономияБиологияГеографияДом и садДругие языкиДругоеИнформатикаИсторияКультураЛитератураЛогикаМатематикаМедицинаМеталлургияМеханикаОбразованиеОхрана трудаПедагогикаПолитикаПравоПсихологияРелигияРиторикаСоциологияСпортСтроительствоТехнологияТуризмФизикаФилософияФинансыХимияЧерчениеЭкологияЭкономикаЭлектроника |
Виртуальное наследование
Подготовка к работе. По указанной литературе и конспекту лекций повторить темы «Множественное наследование», «Виртуальные базовые классы». Разработать программу в соответствии с заданием к лабораторной работе.
Задание. 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
|