67361

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

Лекция

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

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

Украинкский

2014-09-07

71 KB

1 чел.

Лекція № 23

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

План

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

Використання декількох catch-настанов

Перехоплення винятків базового класу.

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

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

Приклад. Демонстрація механізму перехоплення винятків класового типу

 

class myException

{

     public:

 char str[80];

myException() { *str = 0; }

myException(char *s) { strcpy(str, s); }

};

void main()

{             int a, b;

 try

{          cout << "Vvedit 4uselnuk i znamennuk: ";

 cin >> a >> b;

 if(!b) throw myException("Dilutu na 0 ne mo*na!");

     else 

 cout << "4astka = " << a/b << endl;

}

 catch(myException e)

              {      // Перехоплення помилки

 cout << e.str << endl;

}

}  

   Один з можливих результатів виконання цієї програми.

Введіть чисельник і знаменник: 10 0

Ділити на нуль не можна!

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

   Безумовно, реальні винятки класового типу набагато складніші за клас myException. Як правило, створення винятків класового типу має сенс у тому випадку, якщо вони інкапсулюють інформацію, яка дає змогу обробнику винятків ефективно справитися з помилкою і за змогою відновлює працездатність програми.

Використання декількох catch-настанов

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

Приклад. Демонстрація механізму використання декількох catch-настанов

 

   // Тут можливе перехоплення винятків різних типів.

void Xhandler(int test)

{

            try

{

 if(test) throw test;

     else 

  throw "Zna4ennja = 0";

}

 

            catch(int c)

{

 cout << "Perehoplennja! Vunjatok " << c << endl;

}

 catch(char *str)

{

 cout << "Perehoplennja rjadka : " << str << endl;

}

}

void main()

{                     

            cout << "Po4atok" << endl;

Xhandler(1);

Xhandler(2);

Xhandler(0);

Xhandler(3);

cout << "Kinec programu"<<endl;

}

   Внаслідок виконання ця програма відображає на екрані такі результати:

Початок.

Перехоплення! Виняток №: 1

Перехоплення! Виняток №: 2

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

Перехоплення! Виняток №: 3

Кінець програми

   Як бачите, кожна catch-настанова відповідає тільки за винятки "свого" типу.

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

Перехоплення винятків базового класу.

   Важливо розуміти, як виконуються catch-настанови, пов'язані з похідними класами. Йдеться про те, що catch-вираз для базового класу відреагує збігом на винятки будь-якого похідного типу (тобто типу, виведеного з цього базового класу). Отже, якщо потрібно перехоплювати винятки як базового, так і похідного типів, то у catch-послідовності catch-настанову для похідного типу необхідно помістити перед catch-настановою для базового типу. Інакше catch-вираз для базового класу перехоплюватиме крім "своїх" і винятки всіх похідних класів. Розглянемо, наприклад, такий код програми.

Приклад. Демонстрація механізму перехоплення винятків базових і похідних типів

 

class bClass

{

};

class dClass: public bClass

{

};

void main()

{      

            dClass derived;

 try { throw derived; }

 catch(bClass ObjB) {cout << "Perehoplennja vunjatky bazovogo klasy" << endl; }

 catch(dClass ObjD) {cout << "Ce perehoplennja ne vidbydetsja" << endl; }

}

   Оскільки тут об'єкт derived – це об'єкт класу dClass, який виведено з базового класу bClass, то виняток типу derived завжди перехоплюватиметься першим catch-виразом; друга ж catch-настанова при цьому ніколи не виконається. Одні компілятори відреагують на такий стан речей застережним повідомленням, інші можуть видати повідомлення про помилку. У будь-якому випадку, щоб виправити сиацію, достатньо поміняти порядок слідування цих catch-настанов на протилежний.


 

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

28280. Правоспособность граждан (физических лиц) 14.15 KB
  Под правоспособностью понимается способность иметь гражданские права и нести обязанности. Права и обязанности недееспособных лиц приобретаются и осуществляются через представителя который назначается им в обязательном порядке. Конкретным лицом они могут и не реализоваться например не каждый осуществляет возможность иметь права авторов произведений науки литературы и искусства изобретений и иных результатов интеллектуальной деятельности охраняемых законом. Граждане могут иметь любые гражданские права и обязанности не запрещенные законом...
28281. Понятие и виды дееспособности. Порядок ее ограничения 16.78 KB
  Гражданская дееспособность по общему правилу возникает в полном объеме по достижении 18летнего возраста. Однако закон определяет случаи когда гражданин становится полностью дееспособным до достижения указанного возраста. Вопервых в случае вступления в брак при наличии уважительных причин с разрешения органа местного самоуправления по просьбе лиц достигших возраста 16 лет; до достижения возраста 16 лет в виде исключения с учетом особых обстоятельств в случаях установленных законами субъектов Российской Федерации. Для эмансипации...
28282. Осуществление гражданских прав и обязанностей недееспособными и ограниченно дееспособными лицами 15.81 KB
  Существует два случая ограничения гражданина в дееспособности. гражданин который вследствие злоупотребления спиртными напитками или наркотическими средствами ставит свою семью в тяжелое материальное положение может быть ограничен судом в дееспособности. Злоупотреблением спиртными напитками или наркотическими средствами дающим основание для ограничения дееспособности гражданина является такое чрезмерное или систематическое их употребление которое находится в противоречии с интересами его семьи и влечет за собой непосильные расходы...
28283. Опека и попечительство: содержание, условия назначения и прекращения. Патронаж 16.61 KB
  Установление опеки и попечительства над несовершеннолетними оставшимися по какимлибо причинам без попечения родителей вследствие отсутствия родителей лишения их судом родительских прав уклонения родителей от воспитания либо защиты прав и интересов детей преследует также цель обеспечения их воспитания и обучения. Опека форма устройства малолетних граждан не достигших возраста 14 лет и граждан признанных судом недееспособными при которой назначенный органом опеки и попечительства гражданин опекун является законным представителем...
28284. Место жительства, местопребывание и местонахождение: понятие, юридическое значение 14.38 KB
  Место жительства местопребывание и местонахождение: понятие юридическое значение. кто законно находится на территории РФ имеет право выбирать место пребывания и жительства. Закон рассматривает как место пребывания гражданина гостиницу санаторий дом отдыха пансионат кемпинг туристскую базу больницу другое подобное учреждение а также жилое помещение не являющееся местом жительства гражданина в котором он проживает временно. К месту жительства относится: жилой дом квартира служебное жилое помещение специализированные дома...
28285. Признание гражданина безвестно отсутствующим и объявление его умершим: понятие, порядок, правовые последствия 15.43 KB
  Признание гражданина безвестно отсутствующим и объявление его умершим: понятие порядок правовые последствия. При невозможности установить день получения последних сведений об отсутствующем началом исчисления срока для признания безвестного отсутствия считается первое число месяца следующего за тем в котором были получены последние сведения об отсутствующем а при невозможности установить этот месяц первое января следующего года Последствия признания гражданина безвестно отсутствующим. Имущество гражданина признанного безвестно...
28286. Гражданско-правовое положение индивидуального предпринимателя. Банкротство гражданина 16.3 KB
  Гражданин вправе заниматься предпринимательской деятельностью без образования юридического лица с момента государственной регистрации в качестве индивидуального предпринимателя. Статус ИП гражданин приобретает в результате его государственной регистрации в качестве индивидуального предпринимателя. Глава крестьянского фермерского хозяйства осуществляющего деятельность без образования юридического лица признается предпринимателем автоматически с момента государственной регистрации его хозяйства. При этом особой регистрации владельца...
28287. Юридические лица: понятие, признаки, правосубъектность 14.94 KB
  Юридическое лицо это организация которая имеет в собственности хозяйственном ведении или оперативном управлении обособленное имущество и отвечает по своим обязательствам этим имуществом может от своего имени приобретать и осуществлять имущественные и личные неимущественные права нести ответственность и быть истцом и ответчиком в суде. Юридическое лицо должно иметь самостоятельный баланс или смету ст. в гражданскоправовых отношениях юридическое лицо действует как единое целое. их интересы совокупно представляет созданное ими юридическое...
28288. Возникновение и прекращение юридического лица 16.51 KB
  Предмет и цели деятельности указываются в учредительных документах некоммерческих организаций и унитарных предприятий. Реорганизация представляет собой прекращение деятельности одной организации с переходом прав и обязанностей к другой организации. Реорганизация ЮЛ осуществляется в таких формах как: слияние нескольких юридических лиц в одно; присоединение одного или нескольких юридических лиц к другому; разделение юридического лица на несколько самостоятельных организаций; выделение из состава юридического лица не прекращающего при...