Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

Lect18

.pdf
Скачиваний:
5
Добавлен:
03.03.2016
Размер:
645.27 Кб
Скачать

18.Исключения

«Объектно-ориентированное программирование»

доцентПриваловМ.В.

Донецк,ДонНТУ,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

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]