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

Lect18

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

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

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