Ц++ прилагођени изузеци

C Prilagodeni Izuzeci



Изузетак у Ц++ је основни концепт. Изузетак се јавља у времену извршења када програм наиђе на недоследности у току извршавања или неуобичајене сценарије. У Ц++, термини „баци“, „покушај“ и „ухвати“ се користе за руковање или хватање изузетка. Команда „баци“ се користи за генерисање изузетка. Термин „покушај“ служи за избацивање изузетка, а кључна реч „цатцх“ представља руковање изузетком који је развијен са термином „тхров“ и избачен од стране „покушај“ одељка. Хајде да заронимо у неке примере да бисмо демонстрирали изузетке у Ц++.

Пример 1: Програм за креирање прилагођене класе изузетка у Ц++

Овај једноставан пример је имплементиран да демонстрира прилагођено руковање изузетком и откривање у Ц++.

#инцлуде <иостреам>
#инцлуде <изузетак>
Користећи именског простора стд ;

класа ДемоЕкцептион : јавности изузетак
{
виртуелни конст цхар * Шта ( ) конст бацити ( )
{
повратак „Ухваћен прилагођени изузетак“ ;
}
} ;
инт главни ( )
{
ДемоЕкцептион дЕк ;
покушати
{
бацити дЕк ;
}
улов ( изузетак & осим )
{
цоут << осим. Шта ( ) << ендл ;
}
повратак 0 ;
}

Дефинишемо датотеку заглавља у коду укључујући „иостреам“ и „екцептион“. „иостреам“ се посебно позива за улазни и излазни ток, док се библиотека „екцептион“ позива да обради изузетак. Након тога, креирамо класу „ДемоЕкцептион“ која је изведена из класе „екцептион“ у Ц++. Овде постављамо виртуелну функцију вхат() која се користи да обезбеди цонст цхар* који приказује резултате поруке о грешци која је повезана са изузетком.







Затим, позивамо функцију маин() где креирамо „дЕк“ објекат класе „ДемоЕкцептион“. Након тога, имамо дефиницију блока „пробај“ која избацује изузетак ако наиђе. Овде бацамо „дЕк“ објекат.



Затим постављамо блок „цатцх“ да ухвати изузетак и обради га. Ми прослеђујемо референцу изузетка класе као параметар да бисмо ухватили изузетак који је изведен из њега. Унутар блока „цатцх“ позивамо функцију вхат() на „екцепт“ да бисмо добили поруку о изузетку на конзоли.



Након извршавања датог програма, прилагођена порука о изузетку се хвата и баца на конзолу:





Пример 2: Програм за креирање прилагођеног изузетка користећи две класе

Програм наглашава бављење вишеструким изузецима којима се може управљати независно дефинисањем више класа.



#инцлуде <иостреам>
Користећи именског простора стд ;

класа евалуација1 { } ;
класа евалуација2 { } ;

инт главни ( ) {
покушати {
бацити евалуација1 ( ) ;
}
улов ( евалуација1 е ) {
цоут << „Евалуатион1 изузетак Ухваћен!“ << ендл ;
}
покушати {
бацити евалуација2 ( ) ;
}
улов ( евалуација2 е ) {
цоут << „Евалуатион 2 изузетак Ухваћен!“ << ендл ;
}

повратак 0 ;
}

У датом коду имамо дефиницију две класе, “Евалуатион1” и “Евалуатион2”, које су сада празне. Након тога, извршавамо функцију маин() програма. Овде смо поставили блок три{} где се кључна реч „тхров“ користи за избацивање инстанце класе „Евалуатион1()“. Ово представља да је изузетак „Евалуатион1“ избачен ако се појави било који изузетак у програму унутар овог блока „покушај“. Након тога имамо блок цатцх{} где се хвата изузетак и приказује поруку о изузетку.

Слично, имамо дефиницију другог блока три{} за класу „Евалуатион2“. Унутар тог блока три{} бацамо инстанцу класе „Евалуатион2“. Ово баца изузетак „Евалуатион2“ ако се овде догоди грешка. Затим позивамо блок цатцх{} да прикажемо поруку о изузетку користећи команду „цоут“ ако је изузетак ухваћен унутар овог блока.

Два изузетка од различитих блокова „покушај ухватити“ се бацају у конзолу којима рукују две различите класе.

Пример 3: Програм за креирање прилагођеног изузетка са конструктором

Програм користи конструктор за руковање изузетком. Иако не можемо да добијемо вредности из конструктора, то можемо постићи помоћу блока „три-цатцх“.

#инцлуде <иостреам>
Користећи именског простора стд ;

класа Тест {
инт вал ;

јавности :
Тест ( инт н )
{
покушати {
ако ( н == 0 )
вал = н ;
приказ ( ) ;
}

улов ( конст цхар * екп ) {
цоут << „Пронађен изузетак ' ;
цоут << екп << ендл ;
}

}

празнина приказ ( )
{
цоут << 'Вредност = ' << вал << ендл ;
}
} ;

инт главни ( )
{

Тест ( 0 ) ;
цоут << „Поново креирање инстанце ' ;
Тест ( 1 ) ;
}

У датом коду успостављамо класу „Тест“ где је променљива декларисана као „вал“ типа целоброј. Затим имамо дефиницију функције конструктора „Тест()“ која се прослеђује са променљивом „н“. Затим постављамо блок „три-цатцх“ унутар функције „Тест()“ конструктора. Блок три се позива са иф() наредбом. Ако је вредност 'н' једнака нули, блок 'цатцх' ће ухватити изузетак, а порука о изузетку ће бити избачена на промпту. Вредност „н“ се чува у променљивој „вал“ док је иницијализујемо.

Након тога, позивамо функцију дисплаи() да прикажемо вредност која је ускладиштена у променљивој „вал“. Следеће, имамо дефиницију „цатцх” блока где се обрађује изузетак који је избачен од „три” блока. На крају, позивамо функцију маин(). Унутар тога зовемо конструктор „Тест()“. Конструктор се покреће када је објекат класе „Тест()” креиран и специфициран са вредношћу „0” на коју се баца изузетак.

Након тога, поново позивамо класу „Тест()“ да креирамо инстанцу која се прослеђује са вредношћу 1. Овде конструктор неће избацити ниједан изузетак пошто вредност није једнака 0. Функција дисплаи() ће изврши и одштампа вредност  „вал“.

Прилагођени изузетак се баца на конзолу позивањем конструктора. Такође, када је услов задовољен, конструктор се извршава без икаквог изузетка.

Пример 4: Програм за креирање кориснички дефинисаног прилагођеног изузетка

Програм овде обрађује и хвата изузетак који је дефинисао корисник када га пита у промпту.

#инцлуде <иостреам>
#инцлуде <изузетак>
Користећи именског простора стд ;
класа МиДемо : јавности изузетак {
јавности :
конст цхар * Шта ( ) конст бацити ( )
{
повратак „Изузетак! Покушао дељење са нулом! ' ;
}
} ;
инт главни ( )
{
покушати
{
инт н1, н2 ;
цоут << „Унесите два цела броја: ' ;
једење >> н1 >> н2 ;
ако ( н2 == 0 )
{
МиДемо н3 ;
бацити н3 ;
}
друго
{
цоут << 'н1/н2 = ' << н1 / н2 << ендл ;
}
}
улов ( изузетак & екц )
{
цоут << екц. Шта ( ) ;
}
}

У датом коду прво дефинишемо класу „МиДемо()“ која је зависна класа изузетка. Након тога, постављамо функцију публиц вхат() са кључном речи „виртуелно“. Вхат() функција се позива да добије узрок изузетка у програму када функција тхров() избаци изузетак. Затим имамо функцију маин() где су блокови три-цатцх{} дефинисани да открију и обрађују изузетак. Унутар блока три{} декларишемо две променљиве, „н1“ и „н2“, чије вредности се преузимају од корисника помоћу команде „цин“. Када се добију вредности за сваку променљиву „н1“ и „н2“, услов „иф“ ће проверити да ли је променљива „н2“ једнака 0 или не. Ако је тако, избацује се изузетак или се враћају резултати дељења. На крају, имамо блок цатцх{} који узима референцу класе „екцептион“ као параметар наслеђен од ње.

Излаз показује када услов није испуњен и програм се извршава без изузетка:

Такође, дефинишемо вредност „0“ за променљиву „н2“ да бисмо представили како се изузетак баца и хвата у програму.

Закључак

У закључку, демонстрирали смо важан концепт Ц++ који је изузетак. Изузетак омета редовно извршавање програма. За ово смо користили кључне речи „тхров“, „три“ и „цатцх“ да обрадимо изузетак који се дешава у програму. Користили смо ове кључне речи у претходним примерима да другачије обрадимо изузетак.