69721

Обмеження виняткових ситуацій

Лекция

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

Обмеження виняткових ситуацій Програміст може обмежити типи виняткових ситуацій які може генерувати функція в інших місцях програми. Фактично можна взагалі заборонити функції генерувати які б то не було виняткові ситуації.

Украинкский

2014-10-09

29.5 KB

0 чел.

Тема 11. Обмеження виняткових ситуацій

Програміст може обмежити типи виняткових ситуацій, які може генерувати функція в інших місцях програми. Фактично можна взагалі заборонити функції генерувати які б то не було виняткові ситуації. Для цього слід додати у визначення функції розділ throw.

тіп_возвращаємого_значенія імя_функциі (спісок_аргументов)   throw (спісок_тіпов)

{

//...

}

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

Спроба згенерувати виняткову ситуацію, не підтримувану функцією, супроводжується викликом стандартної функції unexpected(). Потім по мовчанню викликається функція abort (), і програма завершується аварійно. Проте для непередбаченої виняткової ситуації можна передбачити власний обробник.

Наступна програма демонструє обмеження на типи виняткових ситуацій, які можуть генеруватися функцією.

// Обмеження   типів  виняткових  ситуацій

// що генеруються  функцією.

#include  <iostream>

using namespace  std;

// Дана  функція може  генерувати  лише  виняткові

// ситуації,   що мають   типи  int,   char  і  double

void Xhandler(int  test)   throw(int,   char,   double)

{

if(test==0)   throw  test;   

//   Генерується  об'єкт   типу   int 

if(test==l)   throw   'a';   

//   Генерується  об'єкт   типу  char 

if(test==2)   throw  123.23;   

//   Генерується  об'єкт   типу  double

}

int main ()

{

cout  <<   "Начало\n";

try  

{

Xhandler(0); // Спробуйте також передати функції

// Xhandler() числа 1 і 2

}

catch(int i)

{

cout « "Перехоплення цілого числа\ п";

}

catch(char з)

{

cout << "Перехоплення строки\ п";

}

catch(double d)

{

cout « "Перехоплення дійсного числа\ п";

}

cout << "Кінець";

return 0;

}

У цій програмі функція xhandler Про може генерувати лише виняткові ситуації, що мають типи int, char і double. При спробі згенерувати виняткову ситуацію будь-якого іншого типу програма завершується аварійна (Інакше кажучи, викликається функція unexpected ().) Щоб побачити, як це відбувається, видалите із списку типів специфікатор int і повторите компіляцію програма

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

У наступному прикладі функція xhandler(). не може генерувати ніяких виняткових ситуацій.

//  Дана  функція не може  генерувати  ніяких

//  виняткових  ситуацій!

void Xhandler(int  test)   throw()

{

/* Наступні оператори більше не виконуються.

Вони приводять до аварійного завершення програми. */

if(test==0) throw test;

if(test==l) throw 'a';

if(test==2) throw 123.23;

}


 

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

37673. АТОМНІ ЕЛЕКТРИЧНІ СТАНЦІЇ 32.5 KB
  АТОМНІ ЕЛЕКТРИЧНІ СТАНЦІЇ Особливості експлуатації АЕС обумовлені специфікою їх технологічної схеми. Однією з особливостей сучасних паротурбінних АЕС є їх робота на насиченому та слабо перегрітому парі з порівняно невисокими тисками пари перед турбіною 65 МПа. На сучасних АЕС застосовуються двоконтурні з реакторами води під тиском ВВЕР та одноконтурні з ―киплячими реакторами РБМК теплові схеми. В теплових схемах АЕС відсутні пароохолодники в регенеративних підігрівниках.
37675. ИЗУЧЕНИЕ ПРИНЦИПА ДЕЙСТВИЯ И ХАРАКТЕРИСТИК ЭЛЕКТРОННЫХ ЛАМП 48.5 KB
  Важнейшей характеристикой диода является зависимость силы тока текущего через лампу анодного тока от разности потенциалов между катодом и анодом анодного напряжения. Анодный ток зависит от анодного напряжения и от температуры катода. При постоянной температуре катода анодный ток 1д возрастает с увеличением анодного напряжения IIа. Поскольку ме ханизм возникновения электрического тока в этом случае отличается от механизма возникновения тока в проводниках то зависимость анодного тока от анодного напряжения не описывается законом Ома.
37676. Морфологія і анатомія генеративних органів 257.5 KB
  Морфологія і анатомія бруньок винограду. Вивчити типи бруньок винограду їх утворення розвиток морфологічну та анатомічну будову пасинкової бруньки і зимуючого вічка. Морфологія і анатомія бруньок винограду. У більшості сортів європейськоазіатського винограду порослеві пагони і вовчки безплідні і відрізняються від звичайних пагонів більшою силою росту в довжину і в товщину рихлістю будови тканини слабким прикріпленням до багаторічної частини стебла.
37677. Закладання винограднику 91 KB
  Тема: Закладання винограднику. Організація території для закладання винограднику. Скласти плансхему організації території відведеної для закладання винограднику. Організація території для закладання винограднику.
37678. Щеплення здеревянілими чубуками 101 KB
  Мета заняття. Засвоїти техніку настільного щеплення здеревянілими чубуками па машинах УПВ, ПМ-450 та МП-7А. Ознайомитись з технікою щеплення вручну способом поліпшеної копуліровки та на штифт за допомогою спеціального секатора.
37679. Виведення основних форм кущів 825.5 KB
  У перший рік добиваються високої приживлюваності саджанців. 1 Виведення середньоштамбового двобічного кордону: 1 кущ у перший рік садіння; 2 кущ на другий рік; 3 кущ на третій рік; 4 кущ на четвертий рік; 5 кущ на пятий рік: а навесні; б влітку в восени. На другий рік вирощують пагони для майбутнього штамба. На третій рік формують штамб.
37680. Загальні відомості про виноград і будову його вегетативних органів 256 KB
  Класифікація винограду. Ознайомитись з екологогеографічними групами сортів європейськоазіатського винограду Vitis vinifer J. Класифікація винограду. У культурі винограду найбільше значення мають такі види роду Vitis J європейськоазіатський виноград Vitis vіпіfега J.
37681. Арифметичні команди восьмирозрядного мікропроцесора КР580ВМ80 (Intel 8080) 465 KB
  Арифметичні команди. Прапорці завжди встановлюються чи скидаються автоматично після виконання наступної команди яка впливає на прапорці в залежності від результату операції. Результати виконання арифметичних і логічних операцій над вмістом акумулятора регістрів загального призначення та комірок памяті впливають на прапорці наступним чином: Прапорець нуля встановлюється в 1 якщо в результаті виконання якоїнебудь команди отримано нульовий результат всі біти задіяного регістру чи комірки памяті встановлено в 0 і скидається в 0 в випадку...