C ++ kivételkezelés: Próbálkozzon, fogjon, dobjon példát

Tartalomjegyzék:

Anonim

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#includeusing 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:

  1. Tartsa be az iostream fejléc fájlt a programba a funkcióinak használatához.
  2. Tartsa be a vektor fejlécfájlt a programba a funkcióinak használatához.
  3. Vegye fel a programban található std névteret az osztályaiba anélkül, hogy meghívná.
  4. Hívja meg a main () függvényt. A program logikáját hozzá kell adni a törzséhez.
  5. Hozzon létre egy vec nevű vektort az egész adatok tárolásához.
  6. Adja hozzá a 0 elemet a vec nevű vektorhoz.
  7. Adja hozzá az 1. elemet a vec nevű vektorhoz.
  8. Egy komment. A C ++ fordító kihagyja.
  9. 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.
  10. Próbálja meg elérni a vec nevű vektor 2. indexében (harmadik elem) tárolt elemet. Ez az elem nem létezik.
  11. A try / catch blokk törzsének vége.
  12. Fogja meg a kivételt. A visszaküldött hibaüzenet az ex változóban lesz tárolva.
  13. Nyomtasson ki néhány üzenetet a konzolon, ha a kivétel befogott.
  14. A rögzítőblokk testének vége.
  15. A programnak a sikeres végrehajtáskor vissza kell adnia egy értéket.
  16. A fő () függvénytest vége.

2. példa:

#include using 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:

  1. Tartsa be az iostream fejléc fájlt a programba a funkcióinak használatához.
  2. Vegye fel a programban található std névteret az osztályaiba anélkül, hogy meghívná.
  3. 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.
  4. 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.
  5. A visszaküldendő / eldobandó üzenet, ha y értéke 0.
  6. Az if utasítás törzsének vége.
  7. A zeroDivision függvénynek vissza kell adnia az x / y értékét.
  8. A zeroDivision függvény törzsének vége.
  9. Hívja meg a main () metódust. A {jelzi ennek a módszernek a kezdetét.
  10. Nyújtson be egy egész változót, és rendelje hozzá a 11 értéket.
  11. Nyújtsa be a b egész változót, és rendelje hozzá a 0 értéket.
  12. Nyújtsunk be egy dupla c változót, és rendeljük hozzá a 0 értéket.
  13. 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.
  14. 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.
  15. Nyomtassa ki a c változó értékét a konzolon.
  16. A try / catch blokk törzsének vége.
  17. Fogja meg a kivételt. A visszaküldött hibaüzenet a változó üzenetben lesz tárolva.
  18. Nyomtassa ki a visszaküldött hibaüzenetet a konzolon.
  19. A rögzítőblokk testének vége.
  20. A programnak a sikeres végrehajtáskor vissza kell adnia egy értéket.
  21. A fő () függvénytest vége.

C ++ szabványos kivételek

A C ++ a

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

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 fejléc definiálta. Az osztály biztosít nekünk egy virtuális tagfüggvényt, aminek a neve.

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.

Példa:

#include #include using namespace std;class newException : public exception{virtual const char* what() const throw(){return "newException occurred";}} newex;int main() {try {throw newex;}catch (exception& ex) {cout << ex.what() << '\n';}return 0;}

Kimenet:

Itt van egy képernyőkép a kódról:

Kód Magyarázat:

  1. Tartsa be az iostream fejléc fájlt programunkba. Funkcióit hibák nélkül fogjuk használni.
  2. A programba foglalja bele a kivétel fejléc fájlt. Olyan funkcióit fogjuk használni, mint hibák, hibák nélkül.
  3. Vegye fel az std névteret programunkba, hogy az osztályait hívás nélkül használhassa.
  4. Hozzon létre egy új osztályt, amelynek neve: NewException. Ez az osztály örökli a C ++ kivételosztályát.
  5. Az osztálytest kezdete.
  6. Írja felül a virtuális tag függvényt, amit () definiált a kivétel fejlécfájljában. Ezután leírjuk saját kivételünket, az új kivételt.
  7. Indítsa el az új kivétel meghatározását.
  8. Az új kivétel elkapása esetén küldendő üzenet.
  9. Az új kivétel definíciójának vége.
  10. A newException osztály törzsének vége. A newex az a név, amelyet új kivételünk befogására használunk, amely után az újException lesz hívva.
  11. Hívja meg a main () függvényt. A program logikáját hozzá kell adni a törzséhez. A {testének kezdetét jelöli.
  12. Egy try utasítással jelölje meg azt a kódot, amelyen belül be kell jelölnünk a kivételt. A {a try / catch blokk törzsének kezdetét jelöli. Az ezzel körülvett kód védetté válik.
  13. Dobja el a newex kivételt, ha elkapta.
  14. A próbatest vége.
  15. Használja a fogási utasítást a kivétel elkapásához. A kivétel hibaüzenet az ex változóban lesz tárolva.
  16. Nyomtassa ki a kivétel hibaüzenetét a konzolon.
  17. A fogási nyilatkozat törzsének vége.
  18. A programnak vissza kell adnia egy értéket, ha sikeresen végrehajtja.
  19. A fő () függvény törzsének vége.

Összegzés:

  • Kivéve a C ++ verzióban történő kezelést, kezelheti a futásidejű hibákat.
  • A futásidejű hibák azok a hibák, amelyek a program futtatása során jelentkeznek.
  • A kivételkezelés segít a program váratlan körülményeinek kezelésében.
  • Váratlan körülmény bekövetkezésekor a programvezérlés átkerül a kezelőkhöz.
  • Kivétel elkapásához helyezzen egy kódrészletet a try-catch blokk alá.
  • A dob kulcsszó segíti a program kivételeit, segít a programnak kezelni a problémát.
  • A try kulcsszó segít azonosítani azt a kódblokkot, amelynél bizonyos kivételek aktiválódnak.
  • Felülírhatjuk a kivétel fejlécfájljának what () függvényét, hogy meghatározzuk a kivételeket.