Шрифт:
Вы заметили ошибку? Такие ошибки трудно выявить, так как сам код является правильным: ошибка заключается в том, что программист не включил в него проверку.
ПОПРОБУЙТЕ
Выполните эту программу при разных значениях. Выведите на печать значения переменных
Существует другой способ решить описанную проблему: использовать исключения (exceptions).
5.6. Исключения
Как и в большинстве языков программирования, в языке С++ существует механизм обработки ошибок: исключения. Основная идея этого понятия заключается в отделении выявления ошибки (это можно сделать в вызываемой функции) от ее обработки (это можно сделать в вызывающей функции), чтобы гарантировать, что ни одна выявленная ошибка не останется необработанной. Иначе говоря, исключения создают механизм, позволяющий сочетать наилучшие подходы к обработке ошибок, исследованные нами до сих пор. Какой бы легкой ни была обработка ошибок, исключения сделают ее еще легче.
Основная идея заключается в следующем: если функция обнаруживает ошибку, которую не может обработать, она не выполняет оператор
Любая функция, прямо или косвенно вызывающая данную функцию, может перехватить созданное исключение с помощью оператора
Мы еще вернемся к исключениям позже (в главе 19), чтобы использовать их немного более сложным способом.
5.6.1. Неправильные аргументы
Рассмотрим вариант функции
Иначе говоря, если аргументы правильные, то программа всегда возвращает площадь прямоугольника, а если нет, то выходим из функции
Теперь функцию можно написать так:
Во-первых, этот фрагмент программы обрабатывает все вызовы функции
5.6.2. Ошибки, связанные с диапазоном
Большинство реальных программ работает с наборами данных. Иначе говоря, они используют разнообразные таблицы, списки и другие структуры данных. В контексте языка С++ наборы данных часто называют контейнерами (containers). Наиболее часто используемым контейнером стандартной библиотеки является тип vector, введенный в разделе 4.6.
Объект типа