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.
#includesegí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.