Kaj je obravnava izjem v C ++?
Obravnava izjem v C ++ vam omogoča način za obvladovanje nepričakovanih okoliščin, kot so napake med izvajanjem. Torej, kadar pride do nepričakovane okoliščine, se nadzor programa prenese na posebne funkcije, znane kot upravljavci.
Če želite ujeti izjeme, postavite nekaj odsekov kode pod pregled izjem. Odsek kode se nahaja v bloku try-catch.
Če se znotraj tega odseka kode zgodi izjemna situacija, bo vržena izjema. Nato bo nadzornik nad izjemo prevzel nadzor nad programom.
V primeru, da ne pride do izjemnih okoliščin, se koda izvede normalno. Ravnatelji bodo prezrti.
V tej vadnici C ++ boste izvedeli:
- Kaj je obravnava izjem v C ++?
- Zakaj ravnanje z izjemami?
- Ključne besede, ki obravnavajo izjeme
- Sintaksa:
- Standardne izjeme za C ++
- Uporabniško določene izjeme
Zakaj ravnanje z izjemami?
Tukaj so razlogi za uporabo izjem v programu C ++:
- Kodo za ravnanje z napakami boste ločili od običajne. Koda bo bolj berljiva in enostavnejša za vzdrževanje.
- Funkcije lahko obvladajo izjeme, ki jih izberejo. Tudi če funkcija vrže veliko izjem, bo obravnavala le nekatere. Klicatelj bo obravnaval nezajete izjeme.
Ključne besede, ki obravnavajo izjeme
Obravnava izjem v C ++ se vrti okoli teh treh ključnih besed:
- vrzi - ko program naleti na težavo, vrže izjemo. Ključna beseda throw pomaga programu izvesti met.
- catch - program za obdelavo izjeme uporabi vodnika izjem. Dodan je v razdelek programa, kjer morate odpraviti težavo. Narejeno je s ključno besedo catch.
- try - poskusni blok identificira kodni blok, za katerega bodo določene izjeme aktivirane. Temu naj sledi en / več ulovnih blokov.
Recimo, da bo blok kode sprožil izjemo. Izjemo bo ujela metoda, ki uporablja ključne besede try and catch. Blok poskus / ulov naj obdaja kodo, ki lahko povzroči izjemo. Takšna koda je znana kot zaščitena koda.
Sintaksa:
Poskus / ulov ima naslednjo sintakso:
try {// the protected code} catch( Exception_Name exception1 ) {// catch block} catch( Exception_Name exception2 ) {// catch block} catch( Exception_Name exceptionN ) {// catch block}
- Čeprav imamo eno izjavo try, imamo lahko veliko stavkov catch.
- ExceptionName je ime izjeme, ki jo je treba ujeti.
- Izjema1, izjema2 in izjemaN so vaša definirana imena za sklicevanje na izjeme.
Primer 1:
#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;}
Izhod:
Tu je posnetek zaslona kode:
Razlaga kode:
- V program vključite glavo datoteke iostream za uporabo njegovih funkcij.
- V program vključite vektorsko datoteko glave za uporabo njegovih funkcij.
- Imenski prostor std vključite v program med svoje razrede, ne da bi ga poklicali.
- Pokličite glavno funkcijo. Programsko logiko je treba dodati v njeno telo.
- Ustvari vektor z imenom vec za shranjevanje celoštevilnih podatkov.
- V vektor z imenom vec dodajte element 0.
- Dodajte element 1 v vektor z imenom vec.
- Komentar. Prevajalnik C ++ ga bo preskočil.
- Uporabite izjavo try, da ujamete izjemo. {Označuje začetek telesa poskusnega / ulovnega bloka. Koda, dodana v telesu, bo postala zaščitena.
- Poskusite dostopati do elementa, shranjenega v indeksu 2 (tretji element) vektorja z imenom vec. Ta element ne obstaja.
- Konec telesa poskusnega / ulovnega bloka.
- Ujemite izjemo. Vrnjeno sporočilo o napaki bo shranjeno v spremenljivki ex.
- Če je izjema ujeta, na konzolo natisnite nekaj sporočila.
- Konec telesa ulovnega bloka.
- Program mora vrniti vrednost ob uspešni izvedbi.
- Konec telesa glavne () funkcije.
2. primer:
#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;}
Izhod:
Tu je posnetek zaslona kode:
Razlaga kode:
- V program vključite glavo datoteke iostream za uporabo njegovih funkcij.
- Imenski prostor std vključite v program med svoje razrede, ne da bi ga poklicali.
- Ustvarite funkcijo z imenom zeroDivision, ki zajema dva celoštevilčna argumenta, x in y. Funkcija mora vrniti dvojni rezultat.
- Z uporabo stavka if preverite, ali je vrednost spremenljivke argument y 0. {označuje začetek telesa if.
- Sporočilo, ki ga je treba vrniti / vrniti, če je y 0.
- Konec telesa stavka if.
- Funkcija zeroDivision mora vrniti vrednost x / y.
- Konec telesa funkcije zeroDivision.
- Pokličite metodo main (). Znak {označuje začetek te metode.
- Navedite celoštevilčno spremenljivko in ji dodelite vrednost 11.
- Navedite celoštevilčno spremenljivko b in ji dodelite vrednost 0.
- Navedite dvojno spremenljivko c in ji dodelite vrednost 0.
- Uporabite izjavo try, da ujamete izjemo. {Označuje začetek telesa poskusnega / ulovnega bloka. Koda, dodana v telesu, bo postala zaščitena.
- Pokličite funkcijo zeroDivision in posredujte argumentoma a in b, to je 11 in 0. Rezultat te operacije bo shranjen v spremenljivki c.
- Na konzolo izpišite vrednost spremenljivke c.
- Konec telesa poskusnega / ulovnega bloka.
- Ujemite izjemo. Vrnjeno sporočilo o napaki bo shranjeno v sporočilu spremenljivke.
- Na konzoli natisnite vrnjeno sporočilo o napaki.
- Konec telesa ulovnega bloka.
- Program mora vrniti vrednost ob uspešni izvedbi.
- Konec telesa glavne () funkcije.
Standardne izjeme za C ++
C ++ ima seznam standardnih izjem, opredeljenih v razredu
Izjema | Opis |
std :: izjema | To je izjema in nadrejeni razred vseh standardnih izjem C ++. |
std :: bad_alloc | To izjemo vrne nova ključna beseda. |
std :: bad_cast | To je izjema, ki jo vrže dynamic_cast. |
std :: bad_exception | Uporabna naprava za obdelavo nepričakovanih izjem v programih C ++. |
std :: bad_typeid | Izjema, ki jo vrže typeid. |
std :: logic_error | To izjemo je teoretično mogoče zaznati z branjem kode. |
std :: error_error | To je izjema po uporabi matematično neveljavne domene. |
std :: invalid_argument | Izjema za uporabo neveljavnih argumentov. |
std :: error_error | Izjema, ustvarjena po ustvarjanju velikega std :: stringa. |
std :: out_of_range | Vrže metoda at. |
std :: runtime_error | To je izjema, ki je ni mogoče zaznati z branjem kode. |
std :: overflow_error | Ta izjema se vrne po pojavu matematičnega prelivanja. |
std :: range_error | Ta izjema se vrne, ko poskušate shraniti vrednost, ki je zunaj dosega. |
std :: underflow_error | Izjema, vržena po pojavu matematičnega podcenjevanja. |
Uporabniško določene izjeme
Razred C ++ std :: izjeme nam omogoča, da definiramo predmete, ki jih lahko vržemo kot izjeme. Ta razred je bil definiran v glavi
Ta funkcija vrne ničelno zaporedje znakov tipa char *. V izpeljane razrede ga lahko prepišemo, da imamo opis izjeme.
Primer:
#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;}
Izhod:
Tu je posnetek zaslona kode:
Razlaga kode:
- V naš program vključite datoteko glave iostream. Njegove funkcije bomo uporabljali brez napak.
- V naš program vključite datoteko z glavo izjeme. Njegove funkcije bomo uporabljali tako kot brez napak.
- V naš program vključite imenski prostor std, da lahko uporablja njegove razrede, ne da bi ga poklical.
- Ustvarite nov razred z imenom newException. Ta razred podeduje razred izjem C ++.
- Začetek predavalnega telesa.
- Prepiši funkcijo navideznega člana, kar je () definirano v datoteki glave izjeme. Nato bomo opisali lastno izjemo, novo izjemo.
- Začnite definicijo nove izjeme.
- Sporočilo, ki ga je treba vrniti, če je nova izjema ujeta.
- Konec opredelitve nove izjeme.
- Konec telesa razreda newException. Newex je ime, ki se uporablja za ulov naše nove izjeme, po kateri bo poklicana newException.
- Pokličite glavno funkcijo. Programsko logiko je treba dodati v njeno telo. {Označuje začetek telesa.
- S stavkom try označite kodo, znotraj katere moramo označiti izjemo. {Označuje začetek telesa poskusnega / ulovnega bloka. Koda, obdana s tem, bo zaščitena.
- Vrzite izjemo newex, če je ujeta.
- Konec preizkusnega telesa.
- Uporabite stavek catch, da ujamete izjemo. Sporočilo o napaki izjeme bo shranjeno v spremenljivki ex.
- Na konzolo natisnite sporočilo o napaki izjeme.
- Konec stavka telesa ulova.
- Program mora vrniti vrednost, če se uspešno izvede.
- Konec telesa glavne () funkcije.
Povzetek:
- Z obdelavo izjem v C ++ lahko obvladujete napake med izvajanjem.
- Napake med izvajanjem so napake, ki se pojavijo med izvajanjem programa.
- Obravnava izjem vam pomaga obvladati vse nepričakovane okoliščine v vašem programu.
- Ko pride do nepričakovane okoliščine, se nadzor programa prenese na upravljavce.
- Če želite ujeti izjemo, postavite odsek kode pod blok try-catch.
- Ključna beseda throw pomaga programu, da vrže izjeme, in pomaga programu, da reši težavo.
- Ključna beseda try pomaga prepoznati kodni blok, za katerega bodo aktivirane določene izjeme.
- Funkcijo what () datoteke z glavo izjeme lahko prepišemo, da določimo naše izjeme.