C ++ erandite käsitlemine: proovige, püüdke, visake näide

Lang L: none (table-of-contents):

Anonim

Mis on erandite käsitlemine C ++ versioonis?

Erandite haldamine C ++ versioonis võimaldab teil käituda ootamatutel asjaoludel, näiteks käitamisvigadel. Nii et kui juhtub mõni ootamatu olukord, viiakse programmi juhtimine spetsiaalsetesse funktsioonidesse, mida nimetatakse käitlejateks.

Erandite saamiseks asetage mõni koodijagu erandite kontrolli alla. Koodilõik paigutatakse proovimise püüdmisplokki.

Kui selles koodiosas toimub erandlik olukord, visatakse erand. Järgmisena võtab erandite käitleja programmi juhtimise üle.

Juhul, kui ei esine erandlikke asjaolusid, toimib kood tavapäraselt. Töötlejaid eiratakse.

Selles C ++ õpetuses saate teada:

  • Mis on erandite käsitlemine C ++ versioonis?
  • Miks erandkäsitlus?
  • Erandite käsitlemise märksõnad
  • Süntaks:
  • C ++ standarderandid
  • Kasutaja määratud erandid

Miks erandkäsitlus?

Siin on põhjus erandkäsitluse kasutamiseks versioonis C ++:

  • Eraldate oma veakäsitluskoodi tavapärasest koodist. Kood on loetavam ja hõlpsam hooldada.
  • Funktsioonid saavad hakkama valitud eranditega. Isegi kui funktsioon loob palju erandeid, käsitleb see ainult mõnda. Helistaja tegeleb tabamata eranditega.

Erandite käsitlemise märksõnad

Erandite käsitlemine C ++ keeles keerleb neid kolme märksõna:

  • viskama - kui programm kohtab probleemi, loob ta erandi. Vise märksõna aitab programmis viset sooritada.
  • catch - programm kasutab erandi püüdmiseks erandite käitlejat. See lisatakse programmi jaotisse, kus peate probleemiga toime tulema. See on tehtud püüdmise märksõna abil.
  • try - prooviblokk määrab koodiploki, mille jaoks aktiveeritakse teatud erandid. Sellele peaks järgnema üks / mitu püüdmisplokki.

Oletame, et koodiplokk tekitab erandi. Erand on püütud meetodi abil, mis kasutab proovimise ja püüdmise märksõnu. Try / catch plokk peaks ümbritsema koodi, mis võib põhjustada erandi. Sellist koodi nimetatakse kaitstud koodiks.

Süntaks:

Try / catch kasutab seda süntaksit:

try {// the protected code} catch( Exception_Name exception1 ) {// catch block} catch( Exception_Name exception2 ) {// catch block} catch( Exception_Name exceptionN ) {// catch block}
  • Kuigi meil on üks proovilause, võib meil olla palju püügilauseid.
  • ExceptionName on püütava erandi nimi.
  • Erand1, erand2 ja erandN on teie määratletud nimed eranditele viitamiseks.

Näide 1:

#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;}

Väljund:

Siin on ekraanipilt koodist:

Koodi selgitus:

  1. Funktsioonide kasutamiseks lisage iostreami päisefail programmi.
  2. Lisage vektorfunktsioonide päisefail programmi.
  3. Kaasake programmi nimeruum oma klassidesse seda kutsumata.
  4. Helistage funktsioonile main (). Programmi loogika tuleks lisada selle kehasse.
  5. Loo täisarvu andmete salvestamiseks vektor nimega vec.
  6. Lisage element 0 vektorile nimega vec.
  7. Lisage element 1 vektorile nimega vec.
  8. Kommentaar. C ++ kompilaator jätab selle vahele.
  9. Erandi leidmiseks kasutage proovilauset. {Tähistab try / catch blokeeringu algust. Kehas lisatud kood muutub kaitstud koodiks.
  10. Proovige juurde pääseda vektori nimelise vektori indeksisse 2 (kolmas element) salvestatud elemendile. Seda elementi pole olemas.
  11. Proovi / püüdmise ploki kere ots.
  12. Püüa erand. Tagastatud veateade salvestatakse muutujasse ex.
  13. Kui erand on tabatud, printige konsoolil mõni teade.
  14. Püüdmisploki kere ots.
  15. Eduka käivitamise korral peaks programm tagastama väärtuse.
  16. Põhifunktsiooni () keha lõpp.

Näide 2:

#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;}

Väljund:

Siin on ekraanipilt koodist:

Koodi selgitus:

  1. Funktsioonide kasutamiseks lisage iostreami päisefail programmi.
  2. Kaasake programmi nimeruum oma klassidesse seda kutsumata.
  3. Looge funktsioon nimega zeroDivision, mis võtab kaks täisarvu argumenti x ja y. Funktsioon peaks tagama topelttulemuse.
  4. Kasutage if-lauset, et kontrollida, kas muutuja argumendi y väärtus on 0. {tähistab if-keha algust.
  5. Tagastatav / visatav teade, kui y on 0.
  6. If-lause sisu lõpp.
  7. Funktsioon zeroDivision peaks tagastama väärtuse x / y.
  8. Funktsiooni zeroDivision keha lõpp.
  9. Kutsuge meetodit main (). {Tähistab selle meetodi algust.
  10. Deklareerige täisarvu muutuja ja määrake sellele väärtus 11.
  11. Deklareerige täisarvu muutuja b ja määrake sellele väärtus 0.
  12. Deklareerige topeltmuutuja c ja määrake sellele väärtus 0.
  13. Erandi leidmiseks kasutage proovilauset. {Tähistab try / catch blokeeringu algust. Kehas lisatud kood muutub kaitstud koodiks.
  14. Kutsuge funktsioon nullDivision ja edastage argumentidele a ja b, see tähendab 11 ja 0. Selle toimingu tulemus salvestatakse muutujasse c.
  15. Trükkige konsoolil muutuja c väärtus.
  16. Proovi / püüdmise ploki kere ots.
  17. Püüa erand. Tagastatud veateade salvestatakse muutuja sõnumisse.
  18. Printige konsoolil tagastatud veateade välja.
  19. Püüdmisploki kere ots.
  20. Eduka käivitamise korral peaks programm tagastama väärtuse.
  21. Põhifunktsiooni () keha lõpp.

C ++ standarderandid

C ++ sisaldab klassi määratletud standardsete erandite loendit. Neid kirjeldatakse allpool:

Erand Kirjeldus
std :: erand See on erand ja kõigi C ++ standardsete erandite vanemklass.
std :: halb_alloc Selle erandi loob uus märksõna.
std :: halb_levi See on dynamic_cast'i poolt visatud erand.
std :: halb_erand Kasulik seade ootamatute erandite käsitlemiseks C ++ programmides.
std :: halb_tüüp Tüüpide visatud erand.
std :: logic_error See erand on teoreetiliselt tuvastatav koodi lugedes.
std :: domeeni_viga See on erand pärast matemaatiliselt vale domeeni kasutamist.
std :: invalid_argument Kehtetute argumentide kasutamise eest visatud erand.
std :: pikkuse_viga Pärast suure std :: stringi loomist visatud erand.
std :: out_of_range Visati meetodi järgi.
std :: runtime_error See on erand, mida ei saa koodi lugemisel tuvastada.
std :: ülevoolu_viga See erand visatakse pärast matemaatilise ülevoolu ilmnemist.
std :: vahemiku_viga See erand visatakse, kui proovite salvestada vahemikust väljapoole jäävat väärtust.
std :: underflow_error Pärast matemaatilise alavoolu ilmnemist visatud erand.

Kasutaja määratud erandid

Klass C ++ std :: erand võimaldab meil määratleda objekte, mida saab eranditena visata. See klass on määratletud päises . Klass pakub meile virtuaalse liikme funktsiooni nimega mis.

See funktsioon tagastab nulliga lõppenud märgijada tüüpi char *. Võime selle tuletatud klassides üle kirjutada, et meil oleks erandi kirjeldus.

Näide:

#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;}

Väljund:

Siin on ekraanipilt koodist:

Koodi selgitus:

  1. Kaasake iostreami päisefail meie programmi. Kasutame selle funktsioone vigu saamata.
  2. Lisage meie programmi erandi päisefail. Me kasutame selle funktsioone nagu mis ilma vigadeta.
  3. Kaasake meie programmi standardne nimeruum, et kasutada selle klasse ilma seda kutsumata.
  4. Looge uus klass nimega newException. See klass pärib erandklassi C ++.
  5. Klassikeha algus.
  6. Kirjutage erandipäisefailis määratletud virtuaalse liikme funktsioon üle (). Seejärel kirjeldame omaenda, uut erandit.
  7. Alustage uue erandi määratlemist.
  8. Uue erandi tabamisel tagastatav teade.
  9. Uue erandi määratluse lõpp.
  10. Klassi newException keha lõpp. Newex on nimi, mida kasutatakse meie uue erandi püüdmiseks, mille järel kutsutakse newException.
  11. Helistage funktsioonile main (). Programmi loogika tuleks lisada selle kehasse. {Tähistab selle keha algust.
  12. Kasutage proovilauset, et märkida kood, milles peame erandi märkima. {Tähistab try / catch blokeeringu algust. Sellega ümbritsetud kood muutub kaitstuks.
  13. Visake newexi erand, kui see on püütud.
  14. Proovikeha lõpp.
  15. Erandi tabamiseks kasutage püüdmislauset. Erandi tõrketeade salvestatakse muutujasse ex.
  16. Printige konsoolile erandi tõrketeade.
  17. Püügiloa lõpp.
  18. Eduka käivitamise korral peaks programm tagastama väärtuse.
  19. Põhifunktsiooni () keha lõpp.

Kokkuvõte:

  • Välja arvatud C ++ versioonis käsitletav erand, saate käitusaja tõrkeid käsitleda.
  • Käitusaja vead on vead, mis ilmnevad programmi käivitamisel.
  • Erandite haldamine aitab teil toime tulla teie programmi ootamatute asjaoludega.
  • Ootamatu asjaolu ilmnemisel edastatakse programmi juhtimine käitlejatele.
  • Erandi saamiseks asetage proovilõikeploki alla koodiosa.
  • Viske märksõna aitab programmis visata erandeid, aidates programmil probleemiga toime tulla.
  • Proovitav märksõna aitab tuvastada koodiploki, mille puhul aktiveeritakse teatud erandid.
  • Erandite määratlemiseks võime erandi päisefaili funktsiooni what () üle kirjutada.