C++ egyéni kivételek

C Egyeni Kivetelek



A kivétel a C++-ban alapvető fogalom. Kivétel akkor fordul elő a végrehajtási időben, amikor a program futásidejű inkonzisztenciákkal vagy szokatlan forgatókönyvekkel találkozik. A C++ nyelvben a „throw”, „try” és „catch” kifejezéseket a kivétel kezelésére vagy elkapására használják. A „dobás” parancs a kivétel generálására szolgál. A „try” kifejezés a kivétel kidobására szolgál, a „catch” kulcsszó pedig egy kivétel kezelését jelenti, amelyet a „dob” kifejezéssel fejlesztettek ki, és amelyet a „try” szakasz dob. Nézzünk néhány példát a C++ kivételeinek bemutatására.

1. példa: Program egyéni kivételosztály létrehozására C++ nyelven

Ez az egyszerű példa az egyéni kivételkezelés és -észlelés bemutatására szolgál C++ nyelven.

#include
#include
segítségével névtér std ;

osztály DemoException : nyilvános kivétel
{
virtuális const char * mit ( ) const dobás ( )
{
Visszatérés 'Egyéni kivételt fogtak' ;
}
} ;
int fő- ( )
{
DemoException dEx ;
próbáld ki
{
dobás dEx ;
}
fogás ( kivétel & kivéve )
{
cout << kivéve. mit ( ) << endl ;
}
Visszatérés 0 ;
}

Meghatározzuk a fejlécfájlt a kódban, beleértve az „iostream” és „exception” kifejezést. Az „iostream” kifejezetten a bemeneti és kimeneti adatfolyamhoz van meghívva, míg az „exception” könyvtár a kivétel kezelésére. Ezt követően létrehozzuk a „DemoException” osztályt, amely a C++ „exception” osztályából származik. Itt beállítjuk a virtuális what() függvényt, amely a const char* biztosítására szolgál, amely megjeleníti a kivételhez kapcsolódó hibaüzenet eredményét.







Ezután meghívunk egy main() függvényt, ahol létrehozzuk a „DemoException” osztály „dEx” objektumát. Ezt követően van egy „try” blokkdefiníciónk, amely kivételt dob, ha találkozik. Itt dobjuk a „dEx” objektumot.



Ezután beállítjuk a „catch” blokkot, hogy elkapja a kivételt és kezelje azt. Az osztálykivétel hivatkozását paraméterként adjuk át, hogy elkapjuk a belőle származó kivételt. A „catch” blokkon belül meghívjuk a what() függvényt az „except”-en, hogy megkapjuk a kivétel üzenetet a konzolon.



Az adott program végrehajtása után a rendszer elkapja az egyéni kivétel üzenetet, és a konzolra dobja:





2. példa: Program egyéni kivétel létrehozására két osztály használatával

A program hangsúlyt fektet a több kivétel kezelésére, amelyek több osztály meghatározásával önállóan is kezelhetők.



#include
segítségével névtér std ;

osztály értékelés1 { } ;
osztály értékelés2 { } ;

int fő- ( ) {
próbáld ki {
dobás értékelés1 ( ) ;
}
fogás ( értékelés1 e ) {
cout << 'Evaluation1 kivétel Elkapva!' << endl ;
}
próbáld ki {
dobás értékelés2 ( ) ;
}
fogás ( értékelés2 e ) {
cout << 'Evaluation 2 kivétel Elkapva!' << endl ;
}

Visszatérés 0 ;
}

Az adott kódban két osztály definíciója van, az „Értékelés1” és az „Értékelés2”, amelyek most üresek. Ezt követően végrehajtjuk a program main() függvényét. Itt beállítjuk a try{} blokkot, ahol a „throw” kulcsszó az „Evaluation1()” osztály példányának dobására szolgál. Ez azt jelenti, hogy az „Evaluation1” kivételt a rendszer dobja, ha a programban a „try” blokkon belül bármilyen kivétel lép fel. Ezt követően van egy catch{} blokk, amely a kivételt elkapja, és megjeleníti a kivétel üzenetét.

Hasonlóképpen van egy másik try{} blokk definíciója az „Evaluation2” osztályhoz. A try{} blokkon belül dobjuk az „Evaluation2” osztály példányát. Ez az „Evaluation2” kivételt jelenti, ha itt hiba történik. Ezután meghívjuk a catch{} blokkot, hogy megjelenítse a kivételüzenetet a „cout” paranccsal, ha a kivétel ebben a blokkban van elkapva.

A különböző „try-catch” blokkok két kivétele a konzolba kerül, amelyeket a két különböző osztály kezel.

3. példa: Program egyéni kivétel létrehozására a Constructor segítségével

A program a konstruktort használja a kivétel kezelésére. Bár az értékeket nem tudjuk lekérni a konstruktortól, ezt a „try-catch” blokk segítségével elérhetjük.

#include
segítségével névtér std ;

osztály Teszt {
int val ;

nyilvános :
Teszt ( int n )
{
próbáld ki {
ha ( n == 0 )
val = n ;
kijelző ( ) ;
}

fogás ( const char * exp ) {
cout << 'Kivétel található \n ' ;
cout << exp << endl ;
}

}

üres kijelző ( )
{
cout << 'Érték =' << val << endl ;
}
} ;

int fő- ( )
{

Teszt ( 0 ) ;
cout << 'Újra példány létrehozása \n ' ;
Teszt ( 1 ) ;
}

Az adott kódban létrehozzuk a „Test” osztályt, ahol a változó integer típusú „val”-ként van deklarálva. Ezután megvan a „Test()” konstruktor függvény definíciója, amelyet az „n” változóval adunk át. Ezután beállítjuk a „try-catch” blokkot a „Test()” konstruktor függvényen belül. A try blokkot az if() utasítással hívjuk meg. Ha az „n” értéke nulla, a „catch” blokk elkapja a kivételt, és a kivétel üzenet jelenik meg a promptban. Az „n” értéke a „val” változóban tárolódik, ahogy inicializáljuk.

Ezt követően meghívjuk a display() függvényt, hogy megjelenítsük a „val” változóban tárolt értéket. Ezután megkapjuk a „catch” blokk definícióját, ahol a „try” blokk által dobott kivételt kezeljük. Végül meghívjuk a main() függvényt. Amin belül hívjuk a „Test()” konstruktort. A konstruktor akkor indul el, amikor a „Test()” osztály objektuma létrejön, és „0” értékkel adjuk meg, amelyre a kivétel kerül.

Ezután ismét meghívjuk a „Test()” osztályt, hogy létrehozzunk egy példányt, amelyet 1-es értékkel adunk át. Itt a konstruktor nem ad kivételt, mivel az érték nem egyenlő 0-val. A display() függvény hajtsa végre és nyomtassa ki a  „val” értékét.

Az egyéni kivétel a konstruktor meghívásával jelenik meg a konzolon. Továbbá, ha a feltétel teljesül, a konstruktor kivétel nélkül végrehajtja.

4. példa: Program egy felhasználó által meghatározott egyéni kivétel létrehozására

A program itt kezeli és elkapja azt a kivételt, amelyet a felhasználó a promptban definiál.

#include
#include
segítségével névtér std ;
osztály MyDemo : nyilvános kivétel {
nyilvános :
const char * mit ( ) const dobás ( )
{
Visszatérés 'Kivétel! Megpróbáltam nullával osztani.! \n ' ;
}
} ;
int fő- ( )
{
próbáld ki
{
int n1, n2 ;
cout << 'Írja be a két egész számot: \n ' ;
enni >> n1 >> n2 ;
ha ( n2 == 0 )
{
MyDemo n3 ;
dobás n3 ;
}
más
{
cout << 'n1/n2 = ' << n1 / n2 << endl ;
}
}
fogás ( kivétel & kiv )
{
cout << kiv. mit ( ) ;
}
}

Az adott kódban először definiáljuk a „MyDemo()” osztályt, amely a kivétel függő osztálya. Ezek után beállítjuk a public what() függvényt a „virtual” kulcsszóval. A what() függvény meghívásra kerül, hogy lekérje a kivétel okát a programban, amikor a throw() függvény kivételt dob. Ezután van egy main() függvényünk, ahol a try-catch{} blokkok vannak meghatározva a kivétel észlelésére és kezelésére. A try{} blokkon belül két változót deklarálunk, „n1” és „n2”, amelyek értékeit a felhasználó a „cin” paranccsal veszi. Amikor az egyes „n1” és „n2” változókhoz tartozó értékeket megkapja, az „if” feltétel ellenőrzi, hogy az „n2” változó 0-val egyenlő-e vagy sem. Ha igen, akkor a rendszer kivételt tesz, vagy visszaküldi az osztás eredményeit. Végül van egy catch{} blokk, amely a „kivétel” osztály hivatkozását veszi tőle örökölt paraméterként.

A kimenet azt mutatja, ha a feltétel nem teljesül, és a program kivétel nélkül lefut:

Ezenkívül meghatározzuk a „0” értékét az „n2” változóhoz, amely azt jelzi, hogy a kivételt hogyan dobja el és kapja el a program.

Következtetés

Végezetül bemutattuk a C++ fontos fogalmát, amely kivétel. Egy kivétel akadályozza a program szabályos végrehajtását. Ehhez a „dob”, „try” és „catch” kulcsszavakat használtuk a programban előforduló kivételek kezelésére. Az előző példákban ezeket a kulcsszavakat használtuk a kivételek eltérő kezelésére.