C ++ išimčių tvarkymas: bandykite, gaudykite, meskite pavyzdį

Turinys:

Anonim

Kas yra išimčių tvarkymas C ++ versijoje?

Išimčių tvarkymas C ++ suteikia galimybę valdyti netikėtas aplinkybes, pvz., Vykdymo laiko klaidas. Taigi, kai įvyksta netikėta aplinkybė, programos valdymas perkeliamas į specialias funkcijas, žinomas kaip tvarkytojai.

Norėdami išgauti išimtis, patikrinkite kai kurias kodo dalis. Kodo dalis dedama į bandymo sugavimo bloką.

Jei toje kodo dalyje įvyksta išskirtinė situacija, bus išimtis. Tada išimčių tvarkytojas perims programos kontrolę.

Tuo atveju, jei neįvyks jokių išskirtinių aplinkybių, kodas bus vykdomas įprastai. Prižiūrėtojai bus ignoruojami.

Šioje C ++ pamokoje sužinosite:

  • Kas yra išimčių tvarkymas C ++ versijoje?
  • Kodėl verta tvarkyti išimtis?
  • Išimčių tvarkymo raktiniai žodžiai
  • Sintaksė:
  • C ++ standartinės išimtys
  • Vartotojo nustatytos išimtys

Kodėl verta tvarkyti išimtis?

Čia pateikiama išimčių tvarkymo C ++ naudojimo priežastis:

  • Klaidų tvarkymo kodą atskirsite nuo įprasto. Kodas bus lengviau įskaitomas ir lengviau prižiūrimas.
  • Funkcijos gali apdoroti pasirinktas išimtis. Net jei funkcija sukelia daug išimčių, ji tvarkys tik kai kurias. Skambinantysis elgsis su nepagautomis išimtimis.

Išimčių tvarkymo raktiniai žodžiai

Išimčių tvarkymas C ++ kalba susijęs su šiais trim raktiniais žodžiais:

  • metimas - kai programa susiduria su problema, ji išmeta išimtį. Metimo raktinis žodis padeda programai atlikti metimą.
  • pagauti - programa naudoja išimčių tvarkytuvą, kad sugautų išimtį. Jis pridedamas prie programos skyriaus, kuriame turite išspręsti problemą. Tai daroma naudojant sugavimo raktinį žodį.
  • bandyti - bandymo blokas identifikuoja kodo bloką, kuriam bus suaktyvintos tam tikros išimtys. Po jo turėtų būti vienas / keli blokai.

Tarkime, kad kodo blokas sukels išimtį. Išimtis bus gauta pagal metodą, naudojant bandymo ir sugavimo raktinius žodžius. „Try / catch“ blokas turėtų apimti kodą, kuris gali sukelti išimtį. Toks kodas yra žinomas kaip apsaugotas kodas.

Sintaksė:

„Try / catch“ naudoja šią sintaksę:

try {// the protected code} catch( Exception_Name exception1 ) {// catch block} catch( Exception_Name exception2 ) {// catch block} catch( Exception_Name exceptionN ) {// catch block}
  • Nors turime vieną bandymo teiginį, galime turėti daug laimikių.
  • „ExceptionName“ yra išimties, kurią reikia sugauti, pavadinimas.
  • Išimtis1, išimtis2 ir išimtisN yra jūsų apibrėžti vardai, nurodantys išimtis.

1 pavyzdys:

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

Išvestis:

Čia yra kodo ekrano kopija:

Kodo paaiškinimas:

  1. Įtraukite „iostream“ antraštės failą į programą, kad galėtumėte naudoti jo funkcijas.
  2. Įtraukite vektoriaus antraštės failą į programą, kad galėtumėte naudoti jo funkcijas.
  3. Įtraukite standartinę vardų sritį į programą į jos klases, jai nepakviesdami.
  4. Iškvieskite pagrindinę () funkciją. Programos logika turėtų būti įtraukta į jos turinį.
  5. Sukurkite vektorių pavadinimu vec, kad išsaugotumėte sveikųjų skaičių duomenis.
  6. Pridėkite elementą 0 prie vektoriaus, pavadinto vec.
  7. Pridėkite elementą 1 prie vektoriaus, pavadinto vec.
  8. Komentaras. Tai praleis kompiliatorius C ++.
  9. Norėdami sugauti išimtį, naudokite „try“ teiginį. {Žymi bandymo / gaudymo bloko teksto pradžią. Tekste pridėtas kodas taps saugomu kodu.
  10. Pabandykite pasiekti elementą, saugomą vektoriaus, pavadinto „vec“, 2 rodyklėje (trečiasis elementas). Šio elemento nėra.
  11. Pabandymo / gaudymo bloko korpuso pabaiga.
  12. Pagauk išimtį. Grąžintas klaidos pranešimas bus saugomas kintamajame ex.
  13. Jei pagaunate išimtį, atsispausdinkite kai kurį pranešimą konsolėje.
  14. Gaudymo bloko korpuso galas.
  15. Sėkmingai įvykdžius, programa turėtų grąžinti vertę.
  16. Pagrindinės () funkcijos kūno pabaiga.

2 pavyzdys:

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

Išvestis:

Čia yra kodo ekrano kopija:

Kodo paaiškinimas:

  1. Įtraukite „iostream“ antraštės failą į programą, kad galėtumėte naudoti jo funkcijas.
  2. Įtraukite standartinę vardų sritį į programą į jos klases, jai nepakviesdami.
  3. Sukurkite funkciją „zeroDivision“, kuriai reikalingi du sveiko skaičiaus argumentai: x ir y. Funkcija turėtų pateikti dvigubą rezultatą.
  4. Naudokite if teiginį, kad patikrintumėte, ar kintamojo argumento y reikšmė yra 0. {žymi if kūno pradžią.
  5. Pranešimas, kurį reikia grąžinti / išmesti, jei y yra 0.
  6. If teiginio turinio pabaiga.
  7. Funkcija „zeroDivision“ turėtų grąžinti x / y reikšmę.
  8. Funkcijos „zeroDivision“ kūno pabaiga.
  9. Iškvieskite main () metodą. {Žymi šio metodo pradžią.
  10. Paskelbkite sveiko skaičiaus kintamąjį ir priskirkite jam 11 reikšmę.
  11. Paskelbkite sveiko skaičiaus kintamąjį b ir priskirkite jam vertę 0.
  12. Paskelbkite dvigubą kintamąjį c ir priskirkite jam 0 vertę.
  13. Norėdami sugauti išimtį, naudokite „try“ teiginį. {Žymi bandymo / gaudymo bloko teksto pradžią. Tekste pridėtas kodas taps saugomu kodu.
  14. Iškvieskite „zeroDivision“ funkciją ir pereikite prie argumentų a ir b, ty 11 ir 0. Šios operacijos rezultatas bus saugomas kintamajame c.
  15. Konsolėje atsispausdinkite kintamojo c vertę.
  16. Pabandymo / gaudymo bloko korpuso pabaiga.
  17. Pagauk išimtį. Grąžintas klaidos pranešimas bus saugomas kintamajame pranešime.
  18. Atsispausdinkite grąžintą klaidos pranešimą konsolėje.
  19. Gaudymo bloko korpuso galas.
  20. Sėkmingai įvykdžius, programa turėtų grąžinti vertę.
  21. Pagrindinės () funkcijos kūno pabaiga.

C ++ standartinės išimtys

C ++ pateikiamas standartinių išimčių, apibrėžtų klasėje, sąrašas. Tai aprašyta toliau:

Išimtis apibūdinimas
std :: išimtis Tai yra išimtis ir visų standartinių C ++ išimčių pagrindinė klasė.
std :: bad_alloc Šią išimtį lemia naujas raktinis žodis.
std :: blogas_cast Tai išimtis, kurią išmeta dynamic_cast.
std :: bloga_skirtis Naudingas prietaisas netikėtoms išimtims tvarkyti C ++ programose.
std :: bad_typeid Išimtis, kurią metė tipidas.
standartinis :: logikos_klaida Ši išimtis teoriškai gali būti nustatyta skaitant kodą.
standartinis :: domeno_klaida Tai yra išimtis, sukurta naudojant matematiškai netinkamą domeną.
std :: invalid_argument Išimtis dėl netinkamų argumentų naudojimo.
standartinis :: ilgio_klaida Išimtis, sukurta sukūrus didelę standartinę :: eilutę.
std :: out_of_range Metimas metodas.
std :: runtime_error Tai yra išimtis, kurios negalima aptikti skaitant kodą.
std :: overflow_error Ši išimtis išmetama įvykus matematiniam perpildymui.
std :: range_error Ši išimtis išmetama, kai bandote išsaugoti diapazono ribų ribas.
std :: underflow_error Išimtis, sukurta po matematinio nepakankamumo.

Vartotojo nustatytos išimtys

C ++ std :: išimčių klasė leidžia mums apibrėžti objektus, kuriuos galima išmesti kaip išimtis. Ši klasė buvo apibrėžta antraštėje . Klasė suteikia mums virtualaus nario funkciją, pavadintą kas.

Ši funkcija pateikia simbolio seką, kurios pabaiga yra char *. Mes galime jį perrašyti išvestinėse klasėse, kad būtų išimties aprašymas.

Pavyzdys:

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

Išvestis:

Čia yra kodo ekrano kopija:

Kodo paaiškinimas:

  1. Įtraukite „iostream“ antraštės failą į mūsų programą. Mes naudosime jo funkcijas be klaidų.
  2. Įtraukite išimties antraštės failą į mūsų programą. Mes naudosime jo funkcijas, pavyzdžiui, kas be klaidų.
  3. Įtraukite standartinę vardų sritį į mūsų programą, kad galėtumėte naudoti jos klases nepaskambinę.
  4. Sukurkite naują klasę pavadinimu newException. Ši klasė paveldi išimties C ++ klasę.
  5. Klasės kūno pradžia.
  6. Perrašykite virtualaus nario funkciją, ką () apibrėžta išimties antraštės faile. Tada aprašysime savo išimtį, naują išimtį.
  7. Pradėkite naujos išimties apibrėžimą.
  8. Pranešimas, kurį reikia grąžinti, jei bus sugauta nauja išimtis.
  9. Naujosios išimties apibrėžimo pabaiga.
  10. NewException klasės turinio pabaiga. „Newex“ yra pavadinimas, naudojamas norint užfiksuoti mūsų naują išimtį, po kurios bus vadinamas „newException“.
  11. Iškvieskite pagrindinę () funkciją. Programos logika turėtų būti įtraukta į jos turinį. {Žymi jo kūno pradžią.
  12. Naudokite bandomąjį teiginį, kad pažymėtumėte kodą, kuriame turime pažymėti išimtį. {Žymi bandymo / gaudymo bloko teksto pradžią. Tai apsuptas kodas taps apsaugotas.
  13. Meskite „newex“ išimtį, jei ji sugauta.
  14. Bandymo kūno pabaiga.
  15. Norėdami sugauti išimtį, naudokite „catch“ pareiškimą. Išimties klaidos pranešimas bus saugomas kintamajame ex.
  16. Atsispausdinkite išimties klaidos pranešimą konsolėje.
  17. Sugavimo pareiškimo turinio pabaiga.
  18. Jei programa vykdoma sėkmingai, programa turėtų grąžinti vertę.
  19. Pagrindinės () funkcijos kūno pabaiga.

Santrauka:

  • Išskyrus išimčių tvarkymą C ++, galite tvarkyti vykdymo laiko klaidas.
  • Klaida yra klaidos, atsirandančios vykdant programą.
  • Išimčių tvarkymas padeda jums susidoroti su bet kokiomis netikėtomis jūsų programos aplinkybėmis.
  • Atsiradus netikėtai aplinkybei, programos valdymas perduodamas tvarkytojams.
  • Norėdami sugauti išimtį, po bandymo sugauti bloku įdėkite kodo dalį.
  • Metimo raktinis žodis padeda programai išmesti išimtis, padeda programai išspręsti problemą.
  • Bandomasis raktinis žodis padeda identifikuoti kodo bloką, kuriam bus suaktyvintos tam tikros išimtys.
  • Mes galime perrašyti išimties antraštės failo funkciją what (), kad apibrėžtume savo išimtis.