Mi az a kivételkezelés C ++ nyelven?
A C ++ verzióban végzett kivételkezelés lehetővé teszi a váratlan körülmények, például a futásidejű hibák kezelését. Tehát minden váratlan körülmény bekövetkezésekor a programvezérlés átkerül a kezelőként ismert speciális funkciókra.
A kivételek befogadásához a kód egy részét fel kell venni egy kivételes ellenőrzés alá. A kódrész a try-catch blokkba kerül.
Ha kivételes helyzet áll elő a kód azon szakaszán belül, akkor kivételt vetnek. Ezután a kivételkezelő átveszi a program irányítását.
Abban az esetben, ha nem történik kivételes körülmény, a kód normálisan fog végrehajtani. A kezelőket figyelmen kívül hagyják.
Ebben a C ++ oktatóanyagban megtudhatja:
- Mi az a kivételkezelés C ++ nyelven?
- Miért a kivételkezelés?
- Kivételek kezelése kulcsszavak
- Szintaxis:
- C ++ szabványos kivételek
- Felhasználó által definiált kivételek
Miért a kivételkezelés?
Itt vannak a kivételkezelés C ++ nyelven történő használatának okai:
- El fogja választani a hibakezelési kódot a normál kódtól. A kód olvashatóbb és könnyebben karbantartható lesz.
- A függvények képesek kezelni az általuk választott kivételeket. Még akkor is, ha egy függvény sok kivételt hoz, csak néhányat kezel. A hívó kezeli az el nem fogott kivételeket.
Kivételek kezelése kulcsszavak
A C ++ változatban a kivétel kezelése a következő három kulcsszó körül forog:
- dobás - ha egy program problémával találkozik, kivételt vet. A dobás kulcsszó segíti a programot a dobás végrehajtásában.
- catch - egy program kivételkezelőt használ a kivétel fogására. Hozzáadódik egy program azon részéhez, ahol kezelnie kell a problémát. A catch kulcsszóval történik.
- try - a try blokk azonosítja azt a kódblokkot, amelynél bizonyos kivételek aktiválódnak. Ezt egy / több elkapási blokknak kell követnie.
Tegyük fel, hogy egy kódblokk kivételt vet fel. A kivételt egy olyan módszer fogja meg, amely megpróbálja elkapni a kulcsszavakat. A try / catch blokknak körül kell vennie a kódot, amely kivételt jelenthet. Az ilyen kód védett kód néven ismert.
Szintaxis:
A try / catch ezt a szintaxist veszi át:
try {// the protected code} catch( Exception_Name exception1 ) {// catch block} catch( Exception_Name exception2 ) {// catch block} catch( Exception_Name exceptionN ) {// catch block}
- Noha van egy próbálkozásunk, sok fogási nyilatkozatunk lehet.
- Az ExceptionName a befogandó kivétel neve.
- A Kivétel1, Kivétel2 és KivételN a megadott nevek a kivételek hivatkozására.
1. példa:
#include#include using 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;}
Kimenet:
Itt van egy képernyőkép a kódról:
Kód Magyarázat:
- Tartsa be az iostream fejléc fájlt a programba a funkcióinak használatához.
- Tartsa be a vektor fejlécfájlt a programba a funkcióinak használatához.
- Vegye fel a programban található std névteret az osztályaiba anélkül, hogy meghívná.
- Hívja meg a main () függvényt. A program logikáját hozzá kell adni a törzséhez.
- Hozzon létre egy vec nevű vektort az egész adatok tárolásához.
- Adja hozzá a 0 elemet a vec nevű vektorhoz.
- Adja hozzá az 1. elemet a vec nevű vektorhoz.
- Egy komment. A C ++ fordító kihagyja.
- Használja a try utasítást a kivétel elkapásához. A {a try / catch blokk törzsének kezdetét jelöli. A törzsben hozzáadott kód védett kód lesz.
- Próbálja meg elérni a vec nevű vektor 2. indexében (harmadik elem) tárolt elemet. Ez az elem nem létezik.
- A try / catch blokk törzsének vége.
- Fogja meg a kivételt. A visszaküldött hibaüzenet az ex változóban lesz tárolva.
- Nyomtasson ki néhány üzenetet a konzolon, ha a kivétel befogott.
- A rögzítőblokk testének vége.
- A programnak a sikeres végrehajtáskor vissza kell adnia egy értéket.
- A fő () függvénytest vége.
2. példa:
#includeusing 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;}
Kimenet:
Itt van egy képernyőkép a kódról:
Kód Magyarázat:
- Tartsa be az iostream fejléc fájlt a programba a funkcióinak használatához.
- Vegye fel a programban található std névteret az osztályaiba anélkül, hogy meghívná.
- Hozzon létre egy zeroDivision nevű függvényt, amely két egész argumentumot vesz fel, x és y. A függvénynek kettős eredményt kell adnia.
- Használjon egy if utasítást annak ellenőrzésére, hogy az y változó argumentum értéke 0. A {az if test kezdetét jelöli.
- A visszaküldendő / eldobandó üzenet, ha y értéke 0.
- Az if utasítás törzsének vége.
- A zeroDivision függvénynek vissza kell adnia az x / y értékét.
- A zeroDivision függvény törzsének vége.
- Hívja meg a main () metódust. A {jelzi ennek a módszernek a kezdetét.
- Nyújtson be egy egész változót, és rendelje hozzá a 11 értéket.
- Nyújtsa be a b egész változót, és rendelje hozzá a 0 értéket.
- Nyújtsunk be egy dupla c változót, és rendeljük hozzá a 0 értéket.
- Használja a try utasítást a kivétel elkapásához. A {a try / catch blokk törzsének kezdetét jelöli. A törzsben hozzáadott kód védett kód lesz.
- Hívja meg a zeroDivision függvényt, és adja át az a és b argumentumoknak, azaz 11-nek és 0-nak. Ennek a műveletnek az eredménye a c változóban lesz tárolva.
- Nyomtassa ki a c változó értékét a konzolon.
- A try / catch blokk törzsének vége.
- Fogja meg a kivételt. A visszaküldött hibaüzenet a változó üzenetben lesz tárolva.
- Nyomtassa ki a visszaküldött hibaüzenetet a konzolon.
- A rögzítőblokk testének vége.
- A programnak a sikeres végrehajtáskor vissza kell adnia egy értéket.
- A fő () függvénytest vége.
C ++ szabványos kivételek
A C ++ a A C ++ std :: kivétel osztály lehetővé teszi számunkra, hogy olyan objektumokat definiáljunk, amelyeket kivételként fel lehet dobni. Ezt az osztályt a Ez a függvény a char * típusú null-végű karaktersorozatot adja vissza. Felülírható osztályokba felülírhatjuk, hogy kivételleírás legyen. Kimenet: Itt van egy képernyőkép a kódról: Kód Magyarázat:
Kivétel Leírás
std :: kivétel Ez kivétel és az összes standard C ++ kivétel szülőosztálya.
std :: bad_alloc Ezt a kivételt egy új kulcsszó dobja meg.
std :: bad_cast Ez egy kivétel, amelyet a dynamic_cast dob.
std :: bad_exception Hasznos eszköz a váratlan kivételek kezelésére a C ++ programokban.
std :: bad_typeid A typeid által dobott kivétel.
std :: logic_error Ez a kivétel elméletileg kódolvasással detektálható.
std :: domain_error Ez kivétel egy matematikailag érvénytelen tartomány használata után.
std :: érvénytelen_argument Kivétel érvénytelen argumentumok használata miatt.
std :: length_error Kivétel egy nagy std :: string létrehozása után.
std :: out_of_range Metszet módszerrel.
std :: runtime_error Ez egy kivétel, amelyet a kód olvasásával nem lehet észlelni.
std :: overflow_error Ezt a kivételt a matematikai túlcsordulás bekövetkezése után dobják el.
std :: range_error Ezt a kivételt akkor dobja el, ha tartományon kívüli értéket próbál tárolni.
std :: underflow_error A matematikai alulcsordulás bekövetkezése után dobott kivétel.
Felhasználó által definiált kivételek
Példa:
#include
Összegzés: