68961

Перехоплення класів виняткових ситуацій

Лекция

Информатика, кибернетика и программирование

Виняткова ситуація може мати будь-який тип, зокрема бути об’єктом класу, визначеного користувачем. У практичних застосуваннях виняткові ситуації, визначені користувачем, зустрічаються частіше, ніж вбудовані. Можливо, це відбувається тому, що програмісти прагнуть якомога точніше визначати класи виняткових...

Украинкский

2014-09-28

34.5 KB

0 чел.

Лекція № 23

Тема: Перехоплення класів виняткових ситуацій

План

  1.  Перехоплення класів виняткових ситуацій
  2.  Застосування декількох операторів catch

Перехоплення класів виняткових ситуацій

Виняткова ситуація може мати будь-який тип, зокрема бути об'єктом класу, визначеного користувачем. У практичних застосуваннях виняткові ситуації, визначені користувачем, зустрічаються частіше, ніж вбудовані. Можливо, це відбувається тому, що програмісти прагнуть якомога точніше визначати класи виняткових ситуацій і створювати об'єкти, що описують вірогідні помилки. Ця інформація дозволяє обробникові виправляти виниклі помилки. Проілюструємо сказане наступним прикладом.

// Перехоплення класу виняткових ситуацій.

#include <iostream>

#include <cstring>

using namespace std;

class MyException {

public:

char str_what[80];

int what;

MyException() { *str_what = 0; what =0; }

MyException(char *s, int e) {

strcpy(str_what, s);

what = e; }

};

 

int main() {

int i ;

try {

cout « "Введіть позитивне число: ";

cin >> i;

if (i<0)

throw MyException("Число не позитивне", i);

} catch (MyException e) { // Перехоплення помилки

cout « e.str_what << ": " ;

cout « e.what « "\n";

}

return 0;

}

В результаті на екрані з'являться наступні рядки.

Введіть позитивне число: -4

Число не позитивне: -4

Програма пропонує користувачеві ввести позитивне число. Якщо у відповідь користувач введе негативне число, створюється об'єкт класу MyException, що описує виниклу помилку. Таким чином, клас MyException інкапсулює інформацію про помилку. Потім ця інформація використовується для обробки помилки. Як правило, інкапсуляція інформації про помилку в окремому класі підвищує ефективність обробки виняткових ситуацій.

Застосування декількох операторів catch

Як відомо, з одним оператором try можна зв'язувати декілька операторів catch. Саме такий варіант використовується найчастішим. Проте кожен оператор catch повинен перехоплювати окремий тип виняткової ситуації. Наприклад, наступна програма перехоплює цілі числа і рядки.

#include <iostream>

using namespace std;

// Перехоплюються декілька типів виняткових ситуацій.

void Xhandler(int test)

{

try {

if(test) throw test;

else throw "Значення рівне нулю";

} catch(int i){

cout << "Перехоплення виняткової ситуації #: " << i « '\n';

} catch(const char *str) {

cout << "Перехоплення рядка: ";

cout << str << '\n';

}

}

int main() {

cout « "Початок\n";

Xhandler(l);

Xhandler(2);

Xhandler(0);

Xhandler(3);

cout « "Кінець";

return 0;

}

Результати роботи цієї програми приведені нижче.

Почало

Перехоплення виняткової ситуації #: 1

Перехоплення виняткової ситуації #: 2

Перехоплення рядка: Значення рівне нулю.

Перехоплення виняткової ситуації #: 3

Кінець

Як видимий, кожен оператор catch відповідає окремому типу. Як правило, оператори catch перевіряються в порядку їх проходження в програмі. Виконується лише той оператор, тип аргументу якого точно відповідає виниклій винятковій ситуації. Решта всіх блоків catch ігнорується.


 

А также другие работы, которые могут Вас заинтересовать

25623. Внезародышевые органы 43.5 KB
  Амнион временный орган обеспечивающий водную среду для развития зародыша. В эмбриогенезе человека он появляется на второй стадии гаструляции сначала как небольшой пузырек дном которого является первичная эктодерма эпибласт зародыша. Желточный мешок наиболее древний в эволюции внезародышевый орган возникший как орган депонирующий питательные вещества желток необходимые для развития зародыша.
25624. Зрительная сенсорная система. Орган зрения 61 KB
  В передней части глаза склера переходит в покрытую многослойным плоским эпителием прозрачную роговицу. Наружная фиброзная оболочка глазного яблока к которой прикрепляются наружные мышцы глаза обеспечивает защитную функцию. Внутренняя чувствительная оболочка глаза сетчатка сенсорная рецепторная часть зрительного анализатора в которой происходят под воздействием света фотохимические превращения зрительных пигментов фототрансдукция изменение биоэлектрической активности нейронов и передача информации о внешнем мире в подкорковые...
25626. Гистогенез и органогенез на 2 и 3 неделе развития 26.5 KB
  Коммутирование ограничение возможных путей развития клеток. Оно совершается последовательно: сначала преобразуются крупные участки генома детерминирующие наиболее общие свойства клеток а позднее более частные свойства. Дифференцировка это изменения в структуре клеток связанные с их функциональной специализацией обусловленные активностью определенных генов. В развивающемся организме дифференцировка сопровождается определенной организацией или размещением специализирующихся клеток что выражается в установлении определенного плана...
25627. Гистогенез и органогенез 22 KB
  4 неделя Углубление желточной складки образование желточного стебля и приподнятие зародыша в полости амниона. Замыкание нервной трубки и формирование переднего невропора к 25 сут и заднего невропора к 27 сут образование нервных ганглиев; закладка легкого желудка печени поджелудочной железы эндокринных желез аденогипофиза щитовидной и околощитовидных желез. Образование ушной и хрусталиковой плакод первичной почки мезонефроса. Образование зачатков верхних и нижних конечностей 4 пар жаберных дуг.
25628. Гладкие мышечные ткани 29.5 KB
  Стволовые клетки и клеткипредшественники в гладкой мышечной ткани на этапах эмбрионального развития пока точно не отождествлены. Поверх чехликов из базальной мембраны между миоцитами проходят эластические и ретикулярные волокна объединяющие клетки в единый тканевой комплекс. Ретикулярные волокна проникают в щели на концах миоцитов закрепляются там и передают усилие сокращения клетки всему их объединению. Поэтому после поступления нервного импульса медиатор распространяется диффузно возбуждая сразу многие клетки.
25630. Дифференцировка первичной эктодермы 39 KB
  Меньшая часть эктодермы расположенная над хордой нейроэктодерма дает начало дифференцировке нервной трубки и ганглиозной пластинки. Нейруляция процесс образования нервной трубки протекает по времени неодинаково в различных частях зародыша. Замыкание нервной трубки начинается в шейном отделе а затем распространяется кзади и несколько замедленнее в краниальном направлении где формируются мозговые пузыри. Из нервной трубки образуются нейроциты и нейроглия головного и спинного мозга сетчатки глаза и органа обоняния.