Vlastní výjimky C++

Vlastni Vyjimky C



Výjimka v C++ je základním konceptem. Výjimka nastane v době provádění, když program narazí na nekonzistence za běhu nebo neobvyklé scénáře. V C++ se výrazy „hodit“, „zkusit“ a „chytit“ používají ke zpracování nebo zachycení výjimky. Ke generování výjimky se používá příkaz „throw“. Výraz „try“ slouží k vyvolání výjimky a klíčové slovo „catch“ představuje zpracování výjimky, která je vyvinuta pomocí termínu „throw“ a je vyvolána sekcí „try“. Pojďme se ponořit do několika příkladů, abychom demonstrovali výjimky v C++.

Příklad 1: Program pro vytvoření vlastní třídy výjimek v C++

Tento jednoduchý příklad je implementován k demonstraci vlastního zpracování a detekce výjimek v C++.

#include
#include
použitím jmenný prostor std ;

třída DemoException : veřejnost výjimka
{
virtuální konst char * co ( ) konst házet ( )
{
vrátit se 'Přistižena vlastní výjimka' ;
}
} ;
int hlavní ( )
{
DemoException dEx ;
Snaž se
{
házet dEx ;
}
chytit ( výjimka & až na )
{
cout << až na. co ( ) << endl ;
}
vrátit se 0 ;
}

Definujeme hlavičkový soubor v kódu včetně „iostream“ a „exception“. „iostream“ je specificky volán pro vstupní a výstupní proud, zatímco knihovna „exception“ je volána pro zpracování výjimky. Poté vytvoříme třídu „DemoException“, která je odvozena od třídy „exception“ C++. Zde nastavíme funkci virtual what(), která se používá k poskytnutí const char*, který zobrazí výsledky chybové zprávy, která je spojena s výjimkou.







Poté vyvoláme funkci main(), kde vytvoříme objekt „dEx“ třídy „DemoException“. Poté máme definici bloku „try“, která vyvolá výjimku, pokud na ni narazí. Zde hodíme objekt „dEx“.



Dále nastavíme blok „catch“, aby zachytil výjimku a zpracoval ji. Odkaz na výjimku třídy předáváme jako parametr pro zachycení výjimky, která je z ní odvozena. Uvnitř bloku „catch“ zavoláme funkci what() na „kromě“, abychom na konzoli dostali zprávu o výjimce.



Po spuštění daného programu se zachytí vlastní zpráva o výjimce a vyvolá se na konzoli:





Příklad 2: Program pro vytvoření vlastní výjimky pomocí dvou tříd

Program klade důraz na řešení více výjimek, které lze zpracovat nezávisle definováním více tříd.



#include
použitím jmenný prostor std ;

třída hodnocení1 { } ;
třída hodnocení2 { } ;

int hlavní ( ) {
Snaž se {
házet hodnocení1 ( ) ;
}
chytit ( hodnocení1 e ) {
cout << 'Výjimka hodnocení 1 chycena!' << endl ;
}
Snaž se {
házet hodnocení2 ( ) ;
}
chytit ( hodnocení2 e ) {
cout << 'Výjimka hodnocení 2 Chycena!' << endl ;
}

vrátit se 0 ;
}

V daném kódu máme definici dvou tříd, „Evaluation1“ a „Evaluation2“, které jsou nyní prázdné. Poté provedeme funkci main() programu. Zde nastavíme blok try{}, kde se klíčové slovo „throw“ používá k vyvolání instance třídy „Evaluation1()“. To znamená, že výjimka „Evaluation1“ je vyvolána, pokud se v programu uvnitř tohoto bloku „try“ objeví nějaká výjimka. Poté máme blok catch{}, kde je výjimka zachycena a zobrazuje zprávu o výjimce.

Podobně máme definici dalšího bloku try{} pro třídu „Evaluation2“. Uvnitř tohoto bloku try{} vyvoláme instanci třídy „Evaluation2“. Pokud zde dojde k chybě, vyvolá to výjimku „Evaluation2“. Poté zavoláme blok catch{}, abychom zobrazili zprávu o výjimce pomocí příkazu „cout“, pokud je výjimka zachycena v tomto bloku.

Dvě výjimky z různých bloků „try-catch“ jsou vyvolány v konzole, které obsluhují dvě různé třídy.

Příklad 3: Program pro vytvoření vlastní výjimky s konstruktorem

Program používá konstruktor pro zpracování výjimky. I když nemůžeme získat hodnoty z konstruktoru, můžeme toho dosáhnout pomocí bloku „try-catch“.

#include
použitím jmenný prostor std ;

třída Test {
int val ;

veřejnost :
Test ( int n )
{
Snaž se {
-li ( n == 0 )
val = n ;
Zobrazit ( ) ;
}

chytit ( konst char * zk ) {
cout << „Nalezena výjimka \n ' ;
cout << zk << endl ;
}

}

prázdnota Zobrazit ( )
{
cout << 'Hodnota =' << val << endl ;
}
} ;

int hlavní ( )
{

Test ( 0 ) ;
cout << 'Znovu se vytváří instance \n ' ;
Test ( 1 ) ;
}

V daném kódu založíme třídu „Test“, kde je proměnná deklarována jako „val“ typu integer. Pak máme definici funkce konstruktoru „Test()“, která se předává s proměnnou „n“. Poté nastavíme blok „try-catch“ ve funkci konstruktoru „Test()“. Blok try se volá příkazem if(). Pokud je hodnota „n“ rovna nule, blok „catch“ zachytí výjimku a na výzvu se zobrazí zpráva o výjimce. Hodnota „n“ je uložena v proměnné „val“, když ji inicializujeme.

Poté zavoláme funkci display() pro zobrazení hodnoty, která je uložena v proměnné „val“. Dále máme definici bloku „catch“, kde se zpracovává výjimka, která je vyvolána blokem „try“. Nakonec vyvoláme funkci main(). Uvnitř toho nazýváme konstruktor „Test()“. Konstruktor se spustí, když je vytvořen objekt třídy „Test()“ a specifikován s hodnotou „0“, na kterou je vyvolána výjimka.

Poté znovu zavoláme třídu „Test()“, abychom vytvořili instanci předávanou s hodnotou 1. Zde konstruktor nevyvolá žádnou výjimku, protože hodnota není rovna 0. Funkce display() spustit a vytisknout hodnotu  „val“.

Vlastní výjimka je vyvolána na konzole voláním konstruktoru. Také, když je podmínka splněna, konstruktor se provede bez jakékoli výjimky.

Příklad 4: Program pro vytvoření uživatelem definované vlastní výjimky

Program zde zpracovává a zachycuje výjimku, která je definována uživatelem na dotaz ve výzvě.

#include
#include
použitím jmenný prostor std ;
třída Moje ukázka : veřejnost výjimka {
veřejnost :
konst char * co ( ) konst házet ( )
{
vrátit se 'Výjimka! Zkusil jsem dělit nulou.' \n ' ;
}
} ;
int hlavní ( )
{
Snaž se
{
int n1, n2 ;
cout << 'Zadejte dvě celá čísla: \n ' ;
jíst >> n1 >> n2 ;
-li ( n2 == 0 )
{
Moje demo n3 ;
házet n3 ;
}
jiný
{
cout << 'n1/n2 = ' << n1 / n2 << endl ;
}
}
chytit ( výjimka & ex )
{
cout << ex. co ( ) ;
}
}

V daném kódu nejprve definujeme třídu „MyDemo()“, což je závislá třída výjimky. Poté nastavíme funkci public what() pomocí klíčového slova „virtual“. Funkce what() je volána, aby získala příčinu výjimky v programu, když funkce throw() vyvolá výjimku. Pak máme funkci main(), kde jsou definovány bloky try-catch{} pro detekci a zpracování výjimky. V bloku try{} deklarujeme dvě proměnné „n1“ a „n2“, jejichž hodnoty jsou převzaty od uživatele pomocí příkazu „cin“. Když jsou přijaty hodnoty pro každou proměnnou „n1“ a „n2“, podmínka „if“ zkontroluje, zda je proměnná „n2“ rovna 0 nebo ne. Pokud ano, je vyvolána výjimka nebo jsou vráceny výsledky dělení. Nakonec máme blok catch{}, který přebírá odkaz na třídu „exception“ jako parametr zděděný z ní.

Výstup ukazuje, kdy podmínka není splněna a program je spuštěn bez výjimky:

Také definujeme hodnotu „0“ pro proměnnou „n2“, která představuje způsob vyvolání a zachycení výjimky v programu.

Závěr

Na závěr jsme demonstrovali důležitý koncept C++, který je výjimkou. Výjimka brání pravidelnému provádění programu. K tomu jsme použili klíčová slova „throw“, „try“ a „catch“, abychom zvládli výjimku, která se v programu stane. Tato klíčová slova jsme použili v předchozích příkladech, abychom výjimku zvládli jinak.