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

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

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

  2. Какие классы называются базовыми, а какие производными?

  3. Как объявить производный класс?

  4. Для чего в базовом классе применяется ключевое слово protected?

  5. Как работают конструкторы и деструкторы при создании производных объектов?

  6. Как выполнить инициализацию базового класса при создании производного объекта?

  7. Передаются ли по наследству производные члены-данные и функции через поколения?

  8. Что такое перекрывание функций?

  9. Для чего выполняется перекрывание функций в производных классах?

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

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

  12. Можно ли в указатель на базовый класс занести указатель производного объекта?

  13. В чем состоит суть полиморфизма функций?

  14. Как объявить виртуальную функцию?

  15. Как работают виртуальные функции?

  16. Что такое v-таблица?

  17. Если в базовом классе функция виртуальная, а в производном она перекрыта как не виртуальная, то будет ли она виртуальной при перекрывании в следующем поколении?

  18. Что такое усечение данных при передаче по значению?

  19. Для чего деструктор объявляют виртуальным?

  20. Есть ли виртуальные конструкторы?

  21. Для чего в базовом классе создают метод клонирования?

  22. Можно ли сделать все функции базового класса виртуальными?

Література

  1. Джесс Либерти. Освой самостоятельно С++. 3 и-е. М.: Вильямс. – 2000.

  2. Г. Шилдт. Полный справочник по С++. 4 и-е. – М.: Вильямс. – 2003.

  3. Т.А. Павловская. С/С++. Программирование на языке высокого уровня. ПИТЕР-2002

  4. С.В. Глушаков. Практикум по С++. ФОЛИО – 2006

  5. Х. Дейтел, П. Дейтел. Как программировать на С++.

  6. Ю.Л. Кетков. Введение в языки программирования C и C++ http://www.intuit.ru/department/pl/ccpp/

  7. А.Л. Фридман. Язык программирования C++ http://www.intuit.ru/department/pl/cpp/

Лабораторная работа 13

Тема: Множественное наследование. Полиморфизм.

Цель:

Теоретические сведения

См. лекция №13

Ход работы

  1. Напишите объявление класса JetPlane, который наследуется от Rocket и AirPlane?

  2. Напишите объявление для B747, который является производным от класса JetPlane?

  3. Напишите программу, в которой классы Car и Bus будут производными от класса Transport, аMicroBus– производным от Car и Bus. СделайтеTransportабстрактным типом данных с двумя чисто виртуальными функциями. Классы Car и Bus не должны быть ADT. Проверьте программу, путем создания объектов разных типов.

  4. Модифицируйте программу п.3 так, чтобы Car был ADT, и выведите из Car классы SportsCar, Wagon, Coupe. Реализуйте в классах простейшие функции.

  5. Напишите программу обработки различных средств транспорта cиспользование массива указателей типаTransport. При обработке используйте как виртуальные методы, так и средстваRTTI.

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

  1. Почему возникает проблема «просачивания наверх»?

  2. Объясните термин RTTI.

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

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

  5. Объясните как работает оператор С++ typeid иRTTIметодname().

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

  7. Из каких частей состоит объект при множественном наследовании?

  8. Как работают конструкторы и деструкторы при множественном наследовании?

  9. В каких случаях необходимо выполнять снятие неоднозначности?

  10. Какие особенности имеют объекты, имеющие общий базовый класс?

  11. Что такое виртуальное наследование?

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

  13. Что такое миксины и для чего они применяются?

  14. Для чего используются абстрактные типы данных? Их особенность?

  15. Что такое полностью виртуальная функция?

  16. Как создать абстрактный класс?

  17. Обязательно ли перекрывать чисто виртуальную функцию в производном классе?

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

  19. Можно ли реализовать чисто виртуальную функцию в базовом классе?

  20. Для чего нужны абстрактные типы данных?