- •1. Оформление кода. Венгерская нотация и нотация Lower Case.
- •2. Автоматические системы документирования. Команды
- •3. Понятие контроля версий проекта. Основные системы контроля версий.
- •4. Система Git. Основные команды Git.
- •5. Модели разработки программного обеспечения. Водопад.
- •6. Модели разработки программного обеспечения. Спираль.
- •7. Модели разработки программного обеспечения. V-образная модель.
- •8. Google Test. Утверждения Google Test.
- •9. Google Test. Фатальные утверждения.
- •10. Google Test. Нефатальные утверждения.
- •11. Разработка через тестирование.
- •12. Объектно-ориентирование программирование.
- •13. Парадигмы объектно-ориентированного программирования.
- •14. Классы и объекты.
- •15. Поля и методы класса.
- •16. Методы класса. Методы set и get.
- •17. Правила доступа и оформления при ооп.
- •18. Конструкторы и деструкторы.
- •19. Конструктор по умолчанию.
- •Пример Конструктора по умолчанию
- •20. Использование спецификаторов доступа.
- •21. Инкапсуляция. Разделение интерфейса и реализации в проекте.
- •22. Защита от повторной компиляции. Назначение. Пример.
- •23. Одиночное и множественное наследование.
- •24. Виртуальная функция. Чистая виртуальная функция.
- •25. Абстрактный класс.
- •26. Полиморфизм.
- •27. Перегрузка бинарных операторов.
- •28. Перегрузка унарных операторов.
- •29. Перегрузка функций.
- •30. Перегрузка операторов. Постфиксная и префиксные формы.
- •31. Технология rad.
- •32. Интегрированная среда разработки.
- •33. Rad. Свойства, события и методы.
- •34. Rad. Стандартная библиотека компонент vcl. Иерархия vcl.
- •35. Rad. События мыши.
- •36. Canvas. Основные методы Canvas.
- •37. Canvas. Основные свойства tBrush.
- •38. Canvas. Основные свойства tPen.
- •39. Пользовательские диалоги.
- •40. Диалог InputBox.
- •InputBox
- •InputBox(prompt[, title] [, default] [, xpos] [, ypos]),
- •41. Тип данных UnicodeString. Основные методы UnicodeString.
- •42. Понятие ошибочной ситуации.
- •43. Исключительная ситуация. Генерация, раскручивание стека и перехват при возникновении исключений.
- •1. Обработка ошибок
- •2. Генерация и перехват исключений
- •45. Понятие структуры данных. Состав элемента структуры.
- •46. Структуры данных: стек, очередь, список.
- •47. Структуры данных: множества, мультимножества, дерево.
- •48. Алгоритмы, контейнеры и итераторы.
- •49. Контейнер как структура данных.
- •Как выбрать контейнер?
- •50. Методы контейнеров.
- •51. Stl. Контейнер list.
- •52. Stl. Контейнер vector.
- •53. Slt. Контейнер map.
- •54. Stl. Контейнер set.
- •55. Основные алгоритмы stl. Алгоритм find.
- •56. Основные алгоритмы stl. Алгоритм max_element.
- •57. Основные алгоритмы stl. Алгоритм sort.
- •58. Основные алгоритмы stl. Алгоритм reverse.
43. Исключительная ситуация. Генерация, раскручивание стека и перехват при возникновении исключений.
1. Обработка ошибок
Когда программа конструируется из раздельных модулей, и, особенно, когда эти модули находятся в независимо разработанных библиотеках, обработка ошибок должна быть разделена на две части:
генерация информации о возникновении ошибочной ситуации, которая не может быть разрешена локально;
обработка ошибок, обнаруженных в других местах.
Для помощи в решении подобных проблем введено понятиеисключения.
Фундаментальная идея состоит в том, что функция, обнаружившая проблему, но не знающая как её решить, генерирует исключение в надежде, что вызвавшая её (непосредственно или косвенно) функция сможет решить возникшую проблему. Функция, которая хочет решать проблемы данного типа, может указать, что она перехватывает такие исключения.
Такой стиль обработки ошибок предпочтительней многих традиционных
Механизм обработки исключений предоставляет способ явного отделения кода обработки ошибок от «обычного» кода, делая таким образом программу более читабельной и лучше подходящей для различных инструментальных средств. Механизм обработки исключений предоставляет более регулярный способ обработки ошибок, упрощая в результате взаимодействие между отдельно написанными фрагментами кода.
Механизм обработки исключений C++ предоставляет программисту средство обработки ошибок в том месте, где их наиболее естественно обрабатывать при данной структуре системы. Исключения делают сложность обработки ошибок более явной. Однако исключения не являются причиной этой сложности.
Изначальной целью механизма обработки исключений является обработка ошибок и обеспечение устойчивости при возникновении ошибок.
2. Генерация и перехват исключений
Обработка исключительных ситуаций обеспечивает способ передачи управления и информации в неопределённую точку, где было выражено желание обрабатывать ситуации данного типа. Ситуации любого типа могут возбуждаться (throw) и перехватываться (catch), и для функции может быть перечислено множество ситуаций, которые могут быть в ней возбуждены.
Реакция будет вызвана только в случае исполнения выражения возбуждения внутри блока с контролем или в функциях, вызванных из этого блока.
Синтаксис блока с контролем:
try { ... } <список реакций>
Список реакций представляет собой следующую конструкцию:
catch (<объявление ситуации>) { ... } [ catch (<объявление ситуации>) { ... } ... ]
Выражение возбуждения имеет следующий синтаксис:
throw <выражение>;
При возбуждении ситуации (т.е. выполнении оператора throw) управление передаётся на реакцию. Тип операнда оператора throw определяет, какие реакции могут перехватывать данную ситуацию.
Если среди реакций блока с контролем не найдено подходящей реакции, поиск подходящей реакции продолжается в блоке с контролем, охватывающем данный блок с контролем.
Если в программе не нашлось подходящей реакции, вызывается функция terminate(). Функция terminate() вызывает функцию, заданную при последнем обращении к функции set_terminate(). По умолчанию функция, вызываемая из функции terminate(), есть abort(). Функция, вызываемая функцией terminate(), должна завершать выполнение программы.
Исключение является объектом некоторого класса, являющегося представлением исключительного случая. Код, обнаруживший ошибку, генерирует объект инструкций throw. Фрагмент кода выражает своё желание обрабатывать исключение при помощи инструкции catch. Результатом генерации исключения инструкцией throw является раскручивание стека до тех пор, пока не будет обнаружен подходящий catch в функции, которая непосредственно или косвенно вызвала функцию, сгенерировавшую исключение.
Сам факт генерации исключения передаёт информацию об ошибке и её типе. Кроме того, исключение может содержать дополнительную информацию. Фундаментальной целью техники обработки исключений является передача информации для восстановления после возникновений проблемы и для осуществления этого надёжным и удобным способом.
44. Стандартные исключения C++ и Builder.
В С++ исключение — это объект. Хотя обычно говорят об исключительной ситуации в программе, такая точка зрения мало что дает, так как с ситуацией сделать ничего нельзя. Поэтому в С++ при возникновении исключительной ситуации программа должна генерировать объект-исключение. Собственно, сама генерация объекта-исключения и создает исключительную ситуацию. Такой подход очень удобен, так как с объектами, в отличие от ситуаций, мы можем много чего делать. Например, объект-исключение можно объявить как обычную переменную, передать его как параметр любым из возможных способов или возвратить в качестве результата. Можно объявлять массивы исключений или включать объекты-исключения в качестве полей в другие классы. В дальнейшем мы будем использовать термин «исключение», понимая под этим объект-исключение. Общая схема обработки исключений такова: в одной части программы, где обнаружена аварийная ситуация, исключение порождается; другая часть программы контролирует возникновение исключения, перехватывает и обрабатывает его. В С++ есть три зарезервированных слова: try (контролировать), catch (перехватывать), throw (порождать), — которые и используются для организации процесса обработки исключений.
