Задание
1. Выполнить обработку исключительных ситуаций согласно приведен-
ному ниже коду.
2. В разработанном классе intArray (лабораторная работа № 8) заменить
запись кода ошибки в поле error на возбуждение исключительной си-
туации того или иного типа и организовать ее обработку.
// функция нахождения частного от деления двух чисел и возбуждение
исключительной // ситуации
double divide(double a, double b)
{
if (b==0) throw (b);
else return a/b;
}
// функция проверки наличия символа в строке и возбуждение исключи-
тельной ситуации
int no_symbol(char *str, char symbol)
55
{
for (int i=0;i
if(str[i] == symbol)
{
char message[80]=”string has’t consist symbol –“
get_messag(message,sym);
throw message;
}
return 1;
}
void get_message(char *message, char sym)
{
while(*message++);
message--;
*message++=sym;
*message=’\0’;
}
// Пример обработки исключительных ситуаций в функции main()
int main()
{
try
{
divide(2/5);
divide(2/0)
no_symbol(“Hello my friend”,’f’);
no_symbol(“September is good time”,’t’);
}
catch(char *message){printf “ %s\n”, message);}
catch(double b){printf (“divide by %g\n”,b);}
return 1;
}
56
Контрольные вопросы
1. Опишите ситуации, когда возникают исключения.
2. В каком месте кода программы может быть сгенерировано исключение?
3. Перечислите основные достоинства и недостатки блока catch(...) {}.
4. Что случится, если имеются несколько подходящих для этого типа
обработчиков?
5. Каким образом можно ограничить типы исключений, генерируемых
функцией?
6. Какой тип указателя надо использовать в блоке catch(), чтобы пере-
хватить любой тип указателей?
7. Что происходит с автоматическими объектами, которые были созданы
в блоке try, когда этот блок генерирует исключение?
|