Lect18
.pdf18.Исключения
«Объектно-ориентированное программирование»
доцентПриваловМ.В.
Донецк,ДонНТУ,2012
1
Контрольныевопросы
Длячегонаследоватьпростыеклассыот шаблонов?
Вчемпреимуществашаблонногоумного указателя?
Вчемпреимуществаобобщенного программирования?
Вчемнедостаткиобобщенного программирования?
Чтотакоеитератор?
Какреализуютсяитераторы?
2
Обработкаошибок
Впроцессеработыпрограммывозможновозникновение непредвиденных ситуаций
◦Нехваткапамятиидругихсистемных ресурсов
◦Ошибкиввода-вывода
◦Некорректныеданные,поступившие отпользователя
◦Нарушение целостностиданных(поврежден файлсданными)
◦Некорректныепараметрыфункций
Хорошоспроектированнаяпрограммадолжнауметь обнаруживать,сигнализироватьиобрабатыватьданные ситуации
◦Сообщитьобошибкепользователю
◦Попытатьсяисправитьошибки
◦Приневозможности дальнейшейработы– сохранить данныеи завершитьработу
3
Обнаружениеошибок
Проверяйтеданныепоступающиеиз внешнихисточниковнакорректность
◦Файлы,архивы,потоки,введенные пользователем данные,сетевыепакетыи т.п.
Осуществляйтепроверкууспешности вызововфункцийиспользуемогоAPI
◦Функцииввода/вывода, выделения/освобожденияресурсов
4
Способыобработкиошибок
Проигнорироватьошибку,оставив программувнеопределенномсостоянии
◦Самыххудшийвариант – никогдатакне делайте!
Выводсообщенияобошибкеиаварийное завершениеработыпрограммы
◦Немногимлучшепредыдущего
Поместитькодошибкивглобальную переменную
◦Проблемысмногопоточнымиприложениями
5
Способыобработкиошибок
Предусмотретьспециальноезначение функции,сигнализирующееобошибке
◦Акаквозвращатьнормальноезначение?
Вызватьфункцию-обработчикошибки
◦Частонеобходимопередаватьконтекст возникновенияошибки
◦Необходимовосстанавливатьнормальное выполнение
6
Какненадоделатьобработку
//ИКАКЭТОТЕПЕРЬОБРАБОТАТЬ?!
long DoSomething() { long *a, c;
FILE *b;
a = malloc(sizeof(long) * 10); if (a == NULL)
return -1;
b = fopen("something.bin", "rb"); if (b == NULL) {
free(a); return -2;
}
fread(a, sizeof(long), 10, b); if (a[0] != 0x10) {
free(a);
fclose(b); return -3;
}
fclose(b); c = a[1]; free(a); return c;
}
7
КакНАДОделатьобработку ошибок
Воспользоватьсямеханизмом исключенийязыкаC++ !
Исключения– этовстроенноевязык C++ средстводляобработки внештатныхситуацийвовремя выполненияпрограммы.
8
Исключения
Исключенияпозволяютпрограмме обработатьвнештатнуюситуациюна болеевысокомуровне,накотором возможновосстановитьнормальную работупрограммы.
Обработкаисключений осуществляетсякодомвнеобычного потокавыполнения.
9
Операторtry-catch
try
{
код, в котором возможно
генерирование исключений
}
catch(объявление исключения)
{
код, обрабатывающий исключение
}
[catch (…)
{
код, обрабатывающий исключения любого типа
}]
10