- •Вопрос 1. Ссылки и ссылочные параметры.
- •Вопрос 2. Перегрузка функций.
- •Вопрос 3. Шаблоны функций.
- •Вопрос 4. Использование const с указателями.
- •Вопрос 5. Область действия класса. Управление доступом к членам класса. Отделение интерфейса от реализации.
- •Вопрос 6. Понятие конструктора .Использование констр-ра с аргументами по умолчанию. Конструктор по умолчанию.
- •Вопрос 7. Понятие деструктора. Когда вызывается конструктор и деструктор.
- •Вопрос 8. Константные объекты и функции-члены.
- •Вопрос 9. Дружественные функции и друж. Классы.
- •Вопрос 10. Указатель this.
- •Вопрос 11. Операции new и delete.
- •Вопрос 12. Статические члены класса.
- •Вопрос 13. Понятие перегрузки операций.
- •Вопрос 14. Функции-операции как члены класса и как друж-е функции
- •Вопрос 15. Перегрузка операций ввода/вывода в поток, бинар и унар операций.
- •Вопрос 17. Перегрузка операций индексации массива.
- •Вопрос 18. Понятие наследования. Механизм ограничения доступа при наследовании.
- •Вопрос 19. Приведение типа указателя базового класса к указателю производного класса и наоборот.
- •Вопрос 21. Конструкторы и деструкторы в производных классах.
- •Вопрос 22. Неявное преобразование объектов производных классов в объекты базового класса.
- •Вопрос 23. Иерархия классов. Уровни наследования.
- •Вопрос 24. Множественное наследование.
- •Вопрос 25. Неопределённость при множ-м наследовании. Включение «классы в классах».
- •Вопрос 26. Понятие виртуальной функции.
- •Вопрос 27. Понятие полиморфизма.
- •Вопрос 28. Абстрактные и конкретные базовые классы.
- •Вопрос 29. Статическое и динамическое связывание.
- •Вопрос 30. Виртуальные деструкторы.
- •Вопрос 31. Шаблоны классов.
- •Вопрос 32. Шаблоны классов и пользовательские типы
- •Вопрос 33. Шаблоны и наследование.
- •Вопрос 34. Классы и объекты потоков ввода/вывода. Иерархия потоковых классов.
- •Вопрос 35, 38. Предопределённые потоковые объекты. Состояние ошибок потока.
- •Вопрос 36. Манипуляторы потоков.
- •Вопрос 37. Неформатированный ввод/вывод с помощью read/ write
- •Вопрос 38. Состояние ошибок ввода/вывода
- •Вопрос 39. Понятие исключения. Когда должна использоваться обработка исключений.
- •Вопрос 40. Генерация исключений. Повторная генерация исключений.
- •Вопрос 41. Перехват исключений.
- •Вопрос 42. Спецификация исключений. Обработка неожиданных исключений.
- •Вопрос 43. «Раскручивание» стека. Иерархия исключений стандартной библиотеки.
- •Вопрос 44. Конструкторы, деструкторы и исключения. Исключения и наследование.
- •Вопрос 45. Обработка неуспешного выполнения new.
- •Вопрос 46. Класс auto_ptr и динамич выделение памяти.
- •Вопрос 47. Static_cast, reinterpret_cast
- •Вопрос 48. Инфо о типе времени выполнения. Оператор dynamic_cast
- •Вопрос 49. Ключевое слово explicit.
- •Вопрос 50. Ключевое слово mutable.
- •Вопрос 51. Указатели на члены класса.
- •Вопрос 52. Множественное наследование. Виртуальные базовые классы.
- •Вопрос 53. Классы-контейнеры и классы-итераторы.
- •Вопрос 54. Понятие ооп. Три условия ооп-программы. Парадигмы ооп.
- •Вопрос 55.Основные составляющие объектного подхода: абстрагирование, инкапсуляция, модульность.
- •Вопрос 56. Основные составляющие объектного подхода: иерархия, типизация, полиморфизм.
- •Вопрос 57. Природа объекта. Состояние, поведение, идентичность объекта.
- •Вопрос 58. Отношения между объектами. Связи. Агрегация.
- •Вопрос 59. Природа классов. Отношения между классами. Типы отношений.
Вопрос 29. Статическое и динамическое связывание.
Статическое (раннее) связывание означает, что объект и вызов ф-ции связываются м/у собой на этапе компиляции, т.е. вся необходимая информация для того, чтобы определить, какая именно ф-ция будет вызвана, известна на этапе компиляции программы (вызов обычных функций). В кач-ве примеров раннего связывания можно указать стандартные вызовы ф-ций, вызовы перегруженных ф-ций и операторов. Достоинство – статическое связ-е более быстрое и обычно требует меньше памяти, чем динамическое (позднее) связ-е. Его недостаток – невысокая гибкость.
Динамическое (позднее) связывание означает, что объект связ-ся с вызовом ф-ций во время исполнения программы, а не ранее. Поздн связ-е достигается путём использ-я виртуальных ф-ций и производных классов. Достоинство – высокая гибкость, использоваться для поддержки общего интерфейса, позволяя при этом различным объектам создавать свою собственную реализацию этого интерфейса, помогает создавать библиотеки классов, допускающие собственное использование и расширение. Использование позднего связывания оправдано, если оно улучшает структурированность и управляемость программы.
Недостаток - потеря быстродействие программы.
Вопрос 30. Виртуальные деструкторы.
Уничтожающие функции - уничтожают экземпляры классов.
Виртуальные деструкторы необходимы в случаях использования указателей на базовые классы при выделении динамической памяти под объекты производных классов.
В случае если деструктор базового класса объявлен как виртуальный, все деструкторы производных классов автоматически становятся виртуальными. Как и в случае виртуальных функций, если в производном классе не описан деструктор, то при удалении объекта будет вызван деструктор базового класса. Если деструктор - описан, то сперва произойдет вызов деструктора производного, а затем базового классов.
Необходимость применения виртуальных деструкторов заключается в использовании операторов new и delete в конструкторах и деструкторах базовых и производных классов, если объекты производных и базовых классов, созданных с помощью new и указателя на базовый класс, то при удалении таких объектов произойдет вызов деструктора базового класса.
Помимо ф-ции виртуальными могут быть деструкторы, конструкторы виртуальными быть не могут.
Вопрос 31. Шаблоны классов.
Возможность, обеспечивающая создание некого общего описания понятия стека (на основе родового класса создаются классы), являющегося специфическими версиями для конкретного типа данных наз-ся шаблонами классов.
Шаблоны классов часто наз-т параметризованными типами, так как они имеют один или большее кол-во параметров типа, определяющих настройку родового шаблона класса на специфический тип данных при создании объекта класса.
Параметризированный класс – некоторый шаблон, на основе к-го можно строить другие классы. Этот класс можно рассматривать как некоторое описание множества классов, отличающиеся только типами их данных. Для обеспечения параметрич полиморфизма используется ключ слово template. Параметрический полиморфизм позволяет использовать один и тот же код относит разных типов.
Для того, чтобы использовать шаблонные классы, достаточно один раз описать шаблон класса. Шаблон класса Stack, например, может служить основой для создания многочисленных классов Stack необходимых программе типов (таких, например, как *Stack для данных типа float>>, <*Stack для данных типа int*, <<Stack для данных типа char* и т. д.).
template<class T>
Class name
Идентификатор Т определяет тип данных-элементов, хранящихся в стеке, и может использоваться в заголовке класса Stack и в функциях-элементах.