Руковање изузецима Ц ++: Покушај, ухвати, баци Пример

Преглед садржаја:

Anonim

Шта је руковање изузецима у Ц ++-у?

Руковање изузецима у Ц ++-у пружа вам начин за руковање неочекиваним околностима као што су грешке током извођења. Дакле, кад год се догоди неочекивана околност, контрола програма се преноси на посебне функције познате као руковаоци.

Да бисте уловили изузетке, неки одељак кода стављате под инспекцију изузетака. Одељак кода смештен је у блок три-цатцх.

Ако се унутар тог одељка кода догоди изузетна ситуација, избациће се изузетак. Следеће, обрађивач изузетака ће преузети контролу над програмом.

У случају да се не догоди нека изузетна околност, код ће се нормално извршити. Руководиоци ће бити занемарени.

У овом упутству за Ц ++ научићете:

  • Шта је руковање изузецима у Ц ++-у?
  • Зашто руковање изузецима?
  • Кључне речи за руковање изузецима
  • Синтакса:
  • Ц ++ стандардни изузеци
  • Кориснички дефинисани изузеци

Зашто руковање изузецима?

Ево разлога за коришћење Екцептион Хандлинга у Ц ++:

  • Код за руковање грешкама одвојићете од уобичајеног кода. Код ће бити читљивији и лакши за одржавање.
  • Функције се могу носити са изузецима које одаберу. Чак и ако функција баца много изузетака, обрадит ће само неке. Позивалац ће се носити са несхваћеним изузецима.

Кључне речи за руковање изузецима

Руковање изузецима у Ц ++-у врти се око ове три кључне речи:

  • бацити - када програм наиђе на проблем, избациће изузетак. Кључна реч тхров помаже програму да изведе бацање.
  • цатцх - програм користи руковатељ изузецима да ухвати изузетак. Додаје се у одељак програма у којем треба да решите проблем. Готово је помоћу кључне речи цатцх.
  • три - блок три идентификује блок кода за који ће се активирати одређени изузеци. Треба да прати један / више блокова улова.

Претпоставимо да ће блок кода покренути изузетак. Изузетак ће ухватити метода која користи кључне речи три анд цатцх. Блок три / цатцх би требао окруживати код који може створити изузетак. Такав код је познат као заштићени код.

Синтакса:

Три / цатцх узима ову синтаксу:

try {// the protected code} catch( Exception_Name exception1 ) {// catch block} catch( Exception_Name exception2 ) {// catch block} catch( Exception_Name exceptionN ) {// catch block}
  • Иако имамо једну изјаву о покушају, можемо имати много изјава о улову.
  • ЕкцептионНаме је име изузетка који треба ухватити.
  • Изузетак1, изузетак2 и изузетакН су ваша дефинисана имена за позивање на изузетке.

Пример 1:

#include#includeusing namespace std;int main() {vector vec;vec.push_back(0);vec.push_back(1);// access the third element, which doesn't existtry{vec.at(2);}catch (exception& ex){cout << "Exception occurred!" << endl;}return 0;}

Излаз:

Ево снимка екрана кода:

Објашњење кода:

  1. Укључите датотеку заглавља иостреам у програм да бисте користили његове функције.
  2. Укључите векторску датотеку заглавља у програм да бисте користили његове функције.
  3. Укључите стд простор имена у програм у своје класе без позива.
  4. Позовите главну () функцију. Програмска логика треба да се дода унутар њеног тела.
  5. Направите вектор под називом вец за чување целобројних података.
  6. Додајте елемент 0 у вектор под називом вец.
  7. Додајте елемент 1 у вектор под називом вец.
  8. Коментар. Прескочиће га компајлер Ц ++.
  9. Користите покушај израза да ухватите изузетак. Ознака {означава почетак тела блока три / цатцх. Код додан у телу постаће заштићени код.
  10. Покушајте да приступите елементу ускладиштеном у индексу 2 (трећи елемент) вектора под називом вец. Овај елемент не постоји.
  11. Крај тела блока три / цатцх.
  12. Ухватите изузетак. Враћена порука о грешци биће сачувана у променљиви ек.
  13. Одштампајте неку поруку на конзоли ако је изузетак ухваћен.
  14. Крај тела блока за хватање.
  15. Програм треба да врати вредност након успешног извршавања.
  16. Крај тела главне () функције.

Пример 2:

#include using namespace std;double zeroDivision(int x, int y) {if (y == 0) {throw "Division by Zero!";}return (x / y);}int main() {int a = 11;int b = 0;double c = 0;try {c = zeroDivision(a, b);cout << c << endl;}catch (const char* message) {cerr << message << endl;}return 0;}

Излаз:

Ево снимка екрана кода:

Објашњење кода:

  1. Укључите датотеку заглавља иостреам у програм да бисте користили његове функције.
  2. Укључите стд простор имена у програм у своје класе без позива.
  3. Креирајте функцију названу зероДивисион која узима два целобројна аргумента, к и и. Функција треба да врати двоструки резултат.
  4. Помоћу израза иф проверите да ли је вредност променљиве аргумента и 0. Ознака {означава почетак тела иф.
  5. Порука коју треба вратити / бацити ако је и 0.
  6. Крај тела изјаве иф.
  7. Функција зероДивисион треба да врати вредност к / и.
  8. Крај тела функције зероДивисион.
  9. Позовите методу маин (). Ознака {означава почетак ове методе.
  10. Прогласите целобројну променљиву и доделите јој вредност 11.
  11. Прогласите целобројну променљиву б и доделите јој вредност 0.
  12. Прогласите двоструку променљиву ц и доделите јој вредност 0.
  13. Користите покушај израза да ухватите изузетак. Ознака {означава почетак тела блока три / цатцх. Код додан у телу постаће заштићени код.
  14. Позовите функцију зероДивисион и прослеђивање аргументима а и б, односно 11 и 0. Резултат ове операције биће сачуван у променљивој ц.
  15. Одштампајте вредност променљиве ц на конзоли.
  16. Крај тела блока три / цатцх.
  17. Ухватите изузетак. Враћена порука о грешци биће сачувана у поруци променљиве.
  18. Одштампајте враћену поруку о грешци на конзоли.
  19. Крај тела блока за хватање.
  20. Програм треба да врати вредност након успешног извршавања.
  21. Крај тела главне () функције.

Ц ++ стандардни изузеци

Ц ++ долази са листом стандардних изузетака дефинисаних у класи <екцептион>. Они су описани у наставку:

Изузетак Опис
стд :: изузетак Ово је изузетак и родитељска класа свих стандардних изузетака Ц ++.
стд :: бад_аллоц Овај изузетак доноси нова кључна реч.
стд :: бад_цаст Ово је изузетак који је избацио динамиц_цаст.
стд :: бад_екцептион Користан уређај за руковање неочекиваним изузецима у програмима Ц ++.
стд :: бад_типеид Изузетак бацио типеид.
стд :: логиц_еррор Овај изузетак се теоретски може открити читањем кода.
стд :: еррор_еррор Ово је изузетак избачен након употребе математички неисправног домена.
стд :: инвалид_аргумент Изнимка избачена због коришћења неважећих аргумената.
стд :: ленгтх_еррор Изузетак избачен након стварања великог стд :: стринга.
стд :: оут_оф_ранге Бачено методом ат.
стд :: рунтиме_еррор Ово је изузетак који се не може открити читањем кода.
стд :: оверфлов_еррор Овај изузетак се избацује након појаве математичког преливања.
стд :: ранге_еррор Овај изузетак се избацује када покушавате да сачувате вредност изван опсега.
стд :: ундерфлов_еррор Изузетак избачен након појаве математичког преливања.

Кориснички дефинисани изузеци

Класа Ц ++ стд :: изузетак омогућава нам да дефинишемо објекте који се могу бацити као изузеци. Ова класа је дефинисана у заглављу <екцептион>. Класа нам пружа функцију виртуелног члана са именом вхат.

Ова функција враћа низ знакова завршених нулом типа цхар *. Можемо је преписати у изведеним класама како би имали опис изузетка.

Пример:

#include #include using namespace std;class newException : public exception{virtual const char* what() const throw(){return "newException occurred";}} newex;int main() {try {throw newex;}catch (exception& ex) {cout << ex.what() << '\n';}return 0;}

Излаз:

Ево снимка екрана кода:

Објашњење кода:

  1. Укључите датотеку заглавља иостреам у наш програм. Користићемо његове функције без грешака.
  2. Укључите датотеку заглавља изузетка у наш програм. Користићемо његове функције попут онога без грешака.
  3. Укључите стд простор имена у наш програм да користи његове класе без позива.
  4. Направите нову класу под називом невЕкцептион. Ова класа наслеђује класу изузетака Ц ++.
  5. Почетак разредног тела.
  6. Препишите функцију виртуелног члана оно () дефинисано у датотеци заглавља изузетка. Затим ћемо описати сопствени изузетак, нови изузетак.
  7. Започните дефиницију новог изузетка.
  8. Порука коју треба вратити ако се ухвати нови изузетак.
  9. Крај дефиниције новог изузетка.
  10. Крај тела класе невЕкцептион. Невек је назив који се користи за хватање нашег новог изузетка, након чега ће бити позван невЕкцептион.
  11. Позовите главну () функцију. Програмска логика треба да се дода унутар њеног тела. {Означава почетак свог тела.
  12. Користите изјаву три да бисте означили код унутар којег морамо да означимо изузетак. Ознака {означава почетак тела блока три / цатцх. Код окружен овим постаће заштићен.
  13. Баците изузетак невек ако је ухваћен.
  14. Крај тела покушаја.
  15. Помоћу израза цатцх ухватите изузетак. Порука о грешци изузетка биће сачувана у променљиви ек.
  16. Одштампајте поруку о грешци изузећа на конзоли.
  17. Крај текста изјаве о улову.
  18. Програм би требало да врати вредност ако се успешно изврши.
  19. Крај тела главне () функције.

Резиме:

  • Изузев руковања у Ц ++-у, можете се носити са грешкама током извођења.
  • Рунтиме грешке су грешке које се јављају током извршавања програма.
  • Руковање изузецима помаже вам у решавању свих неочекиваних околности у вашем програму.
  • Када се догоди неочекивана околност, контрола програма се преноси на руковаоце.
  • Да бисте уловили изузетак, ставите одељак кода испод блока три-цатцх.
  • Кључна реч тхров помаже програму да избаци изузетке, помажући програму да реши проблем.
  • Кључна реч три помаже у идентификовању блока кода за који ће се активирати одређени изузеци.
  • Можемо преписати функцију вхат () датотеке заглавља изузетка да бисмо дефинисали наше изузетке.