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 ігнорується.


 

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

46231. Указатели на функции, имитация таблиц виртуальных функций с помощью процедурного подхода 14.47 KB
  Возможны только две операции с функциями: вызов и взятие адреса. Указатель, полученный с помощью последней операции, можно впоследствии использовать для вызова функции.
46232. СССР в послевоенные годы (1945–1953) 14.39 KB
  Фултон США 5 марта 1946 г. Затем инициатива развития конфронтационных действий в русле холодной войны перешла к США. Трумэн в ежегодном послании Конгрессу США предложил конкретные меры направленные против распространения советского влияния включавшие в себя экономическую помощь Европе образование военнополитического союза под руководством США размещение американских военных баз вдоль советских границ а также оказание поддержки оппозиционным движениям в странах Восточной Европы. государственным секретарем США Дж.
46233. Шаблоны типа 14.38 KB
  Шаблоны предназначены для кодирования обобщённых алгоритмов без привязки к типам данных. Пример: Необходимо реализовать функцию выполняющую вычисление формулы
46234. Основные системные группировки лексики в языке. Критерии классификации 14.36 KB
  функциональнограмматическая на основе частей речи 2. по стилистической характеристике нейтральная межстилевая и стилистически маркированной высокой официальной научной книжной речи разговорной и просторечной устной речи. Общенародные слова общеупотребительная лексика для всех говорящих на русском языке основная масса таких слов устойчива и употребительна во всех стилях речи.
46235. Понятие операции. Особенности конкретных операций 14.36 KB
  Понятие операции. На определенном этапе развития обобщенные схемы действий превращаются в операции операторные структуры поэтому концепция Пиаже называется операциональной. Операции это интериоризированные внутренние предметные действия ставшие обратимыми и сгруппированными в системы. Посредством обратной операции мысль может вернуться к начальному исходному моменту рассуждений.
46236. Исследование языковой семантики. Ономасиологический и семасиологический подходы 14.32 KB
  Таковы споры о происхождении значений слов и их отношений к бытию и мышлению ведущиеся аналогистами и аномалистами в древности и номиналистами реалистами концептуалистами в Средние века; Ономасиология отрасль семантики изучающая наименования использование языковых средств для обозначения внеязыковых объектов. основывается на движении от обозначаемого предмета к средствам его обозначения шире от содержания к форме. лингвистическом направлении слова и вещи прежде всего на материале романской диалектологии исследовавшей способы...
46237. Ж. Пиаже. «Комментарии к критическим замечаниям Л.С. Выготского на книги «Речь и мышление ребенка» и «Суждения и рассуждения ребенка» 14.27 KB
  Пиаже. Выготского на книги Речь и мышление ребенка и Суждения и рассуждения ребенка Пиаже обнаруживает через 25 лет после опубликования работу коллеги который уже умер. а те из работ Пиаже которые он обсуждает относятся к 1923 и 1924. Пиаже постарался увидеть оправдываются ли критические замечания Выготского в свете его позднейших работ.
46238. Грамматика как научная дисциплина. Основные подходы к изучению языковой грамматики. Виды и уровни языковой грамматики 14.26 KB
  Грамматический строй языка имеет свои категории и единицы словоформы и словообразовательные модели словосочетания и предложения. В русской грамматике выделяются именные морфологические категории рода одушевлённости неодушевлённости числа падежа степени сравнения; глагольные категории вида залога наклонения времени и лица; грамматическая форма внешнее языковое выражение грамматического значения в каждом конкретном случае употребления слова. Синтаксические категории = тип предложения специфическая характеристика присущая только...