- •Вопрос 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. Природа классов. Отношения между классами. Типы отношений.
Вопрос 42. Спецификация исключений. Обработка неожиданных исключений.
В описании ф-ции может быть указана спецификация исключений — список исключений, к-ые могут генерироваться этой функцией:
int g (float h} throw (а, b, с) {
// тело функции }
Можно ограничить типы исключений, к-ые могут генерироваться данной ф-цией. Типы исключений специфицируются в объявлении ф-ции как спецификация исключений. Эта спецификация перечисляет исключения, к-ые могут быть сгенерированы в функции. Функция может генерировать обозначенные исключения или типы, производные от них. Хотя при этом предполагается гарантия, что другие типы исключений генерироваться не будут, генерация их все-таки возможна.
Ф-ция без спецификации исключений может генерировать любое исключение:
void g (); // эта функция может генерировать любое исключение
Ф-ции, содержащие пустую спецификацию исключений, не генерируют исключений:
void g () throw (); // эта ф-ция не генерирует никаких исключений (не вырабатывает никаких исключений), где throw () - пустая спецификация исключений
Если генерируется исключение, не перечисленное в спецификации, вызывается функция обработки непредусмотренных исключений unexpected. Ф-ция unexpected может быть переопределена с помощью ф-ции set_unexpected.
Если ф-ция генерирует исключение некоторого класса, то эта ф-ция может также генерировать исключения всех классов, к-ые явл-ся производными от этого класса.
Обработка неожидаемых исключений
Ф-ция unexpected вызывает ф-цию, определен с помощью ф-ции set_unexpected. Если нет ф-ции, определенной таким способом, то по умолчанию вызывается ф-ция завершения программы terminate.
Функция terminate может быть вызвана различными путями:
явно;
если сгенерированное исключение не может быть перехвачено;
если во время обработки исключения разрушен стек;
как заданное по умолчанию действие при вызове unexpected;
во время разматывания стека, вызванного исключением, и попытки со стороны деструктора сгенерировать исключение, что вызывает обращение к terminate.
Ф-ция set_terminate может задавать ф-цию, к-ая будет вызываться при вызове terminate. Иначе, terminate вызывает abort.
Ф-ции set_terminate и set_unexpected получают в кач-ве аргументов ук-ли на ф-ции. Каждый аргумент должен указывать на ф-цию, возвращающую тип void и без аргументов.
Если последним действием определенной пользователем ф-ции завершения не явл-ся завершение работы программы, то автоматически будет вызываться ф-ция abort для прекращения работы программы после выполнения других операторов определенной пользователем ф-ции завершения.
Вопрос 43. «Раскручивание» стека. Иерархия исключений стандартной библиотеки.
Одним из главных преимуществ исп-я обработки искл ситуации явл обеспечение развёртывания стека. Раскручивание стека – процесс вызова деструкторов локальных объектов, когда искл ситуации выводят их из области видимости. При запуске исключения автоматически вызываются деструкторы всех стековых объектов между throw и catch.
Когда исключение выброшено, но не перехвачено в некоторой области действия, стек вызовов разматывается и делается попытка перехвата исключения в следующем внешнем блоке try/catch. Разматывание стека вызовов означает, что функция, в которой исключение не было перехвачено, завершается, все локальные переменные разрушаются, а управление возвращается в ту точку, откуда функция была вызвана. Если эта точка программы находится в блоке try, предпринимается попытка перехватить исключение. Если же данная точка не находится в блоке try или исключение не перехвачено, то снова происходит разматывание стека. Если исключение в программе не перехвачено, вызывается функция terminate, завершающая ее работу.
Иерархия исключений стандартной библиотеки:
Вершиной иерархии является базовый класс exception, к-ый содержит ф-цию what(), переопределенную в каждом производном классе для выдачи соответствующего сообщения об ошибке.
Непосредственными производными классами базового exception являются runtime_error и logic_error, каждый из к-ых имеет несколько производных классов.
Кроме того, производными от exception являются исключения bad_alloc (выбрасывается операцией new), bad_cast (выбрасывается операцией dynamic_cast) и bad_typeid (выбрасывается typeid).
Класс logic_error явл-ся базовым классом нескольких стандартных классов исключений, указывающих на ошибки в программной логике, которые часто можно предупредить написанием правильного кода.
invalid_argument (ф-ции был передан недопустимый аргумент).
length_error (для объекта была использована длина, большая мах-но допустимой для объекта).
out_of_range ( значение индекса массива или объекта string находится вне допустимого диапазона).
Класс runtime_error явл-ся базовым классом нескольких других стандартных классов исключений, указывающих на ошибки в программе, проявляющиеся только во время выполнения.
overflow_error ( арифметическую ошибка переполнения).
underflow_error (ошибка исчезновения порядка).