Što je rukovanje iznimkama u C ++-u?
Rukovanje iznimkama u C ++-u pruža vam način rješavanja neočekivanih okolnosti poput pogrešaka u izvođenju. Dakle, kad god se dogodi neočekivana okolnost, programska kontrola se prenosi na posebne funkcije poznate kao rukovatelji.
Da biste ulovili iznimke, neki dio koda stavljate pod inspekciju iznimki. Odjeljak koda smješten je unutar bloka try-catch.
Ako se unutar tog odjeljka koda dogodi iznimna situacija, pojavit će se iznimka. Dalje, rukovatelj iznimkama preuzet će kontrolu nad programom.
U slučaju da se ne dogodi iznimna okolnost, kôd će se normalno izvršiti. Voditelji će biti zanemareni.
U ovom C ++ tutorialu naučit ćete:
- Što je rukovanje iznimkama u C ++-u?
- Zašto rukovanje iznimkama?
- Ključne riječi za rukovanje iznimkama
- Sintaksa:
- C ++ standardne iznimke
- Korisnički definirane iznimke
Zašto rukovanje iznimkama?
Evo razloga za rukovanje iznimkama u C ++-u:
- Kôd za rukovanje pogreškama odvojit ćete od uobičajenog koda. Kôd će biti čitljiviji i lakši za održavanje.
- Funkcije se mogu nositi s iznimkama koje odaberu. Čak i ako funkcija baca mnogo iznimaka, obradit će samo neke. Pozivatelj će se nositi s neuhvaćenim iznimkama.
Ključne riječi za rukovanje iznimkama
Rukovanje iznimkama u C ++-u vrti se oko ove tri ključne riječi:
- baciti - kada program naiđe na problem, izbacuje iznimku. Ključna riječ bacanje pomaže programu u izvođenju bacanja.
- catch - program koristi rukovatelj iznimkama da uhvati iznimku. Dodaje se u odjeljak programa u kojem trebate riješiti problem. Radi se pomoću ključne riječi catch.
- try - blok try identificira blok koda za koji će se aktivirati određene iznimke. Slijedi jedan / više blokova ulova.
Pretpostavimo da će blok koda stvoriti iznimku. Izuzetak će uhvatiti metoda koja koristi ključne riječi try and catch. Blok try / catch trebao bi okružiti kod koji može stvoriti iznimku. Takav je kod poznat kao zaštićeni kod.
Sintaksa:
Try / catch uzima sljedeću sintaksu:
try {// the protected code} catch( Exception_Name exception1 ) {// catch block} catch( Exception_Name exception2 ) {// catch block} catch( Exception_Name exceptionN ) {// catch block}
- Iako imamo jednu izjavu try, možemo imati mnogo izjava catch.
- ExceptionName je naziv iznimke koju treba uhvatiti.
- Iznimka1, iznimka2 i iznimkaN vaša su definirana imena za pozivanje na iznimke.
Primjer 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;}
Izlaz:
Evo snimke zaslona koda:
Objašnjenje koda:
- Uključite datoteku zaglavlja iostream u program da biste koristili njegove funkcije.
- Uključite vektorsku datoteku zaglavlja u program da biste koristili njegove funkcije.
- Uključite std prostor imena u program u svoje klase bez poziva.
- Pozovite glavnu () funkciju. Logiku programa treba dodati unutar svog tijela.
- Stvorite vektor pod nazivom vec za pohranu cjelobrojnih podataka.
- Dodajte element 0 vektoru pod nazivom vec.
- Dodajte element 1 vektoru pod nazivom vec.
- Komentar. Preskočit će ga C ++ prevodilac.
- Koristite izjavu try da biste uhvatili iznimku. Oznaka {označava početak tijela bloka try / catch. Kôd dodan u tijelu postat će zaštićeni kôd.
- Pokušajte pristupiti elementu pohranjenom u indeksu 2 (treći element) vektora pod nazivom vec. Ovaj element ne postoji.
- Kraj tijela bloka try / catch.
- Uhvatite iznimku. Vraćena poruka o pogrešci pohranit će se u varijablu ex.
- Ispišite neku poruku na konzoli ako se uhvati iznimka.
- Kraj tijela bloka za ulov.
- Program bi trebao vratiti vrijednost nakon uspješnog izvršavanja.
- Kraj tijela glavne () funkcije.
Primjer 2:
#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;}
Izlaz:
Evo snimke zaslona koda:
Objašnjenje koda:
- Uključite datoteku zaglavlja iostream u program da biste koristili njegove funkcije.
- Uključite std prostor imena u program u svoje klase bez poziva.
- Stvorite funkciju nazvanu zeroDivision koja uzima dva cjelobrojna argumenta, x i y. Funkcija bi trebala vratiti dvostruki rezultat.
- Upotrijebite izraz if da provjerite je li vrijednost varijable argument y 0. {Označava početak tijela if.
- Poruka koju treba vratiti / baciti ako je y 0.
- Kraj tijela izjave if.
- Funkcija zeroDivision trebala bi vratiti vrijednost x / y.
- Kraj tijela funkcije zeroDivision.
- Pozovite metodu main (). Oznaka {označava početak ove metode.
- Proglasite cjelobrojnu varijablu i dodijelite joj vrijednost 11.
- Proglasite cjelobrojnu varijablu b i dodijelite joj vrijednost 0.
- Proglasite dvostruku varijablu c i dodijelite joj vrijednost 0.
- Koristite izjavu try da biste uhvatili iznimku. Oznaka {označava početak tijela bloka try / catch. Kôd dodan u tijelu postat će zaštićeni kôd.
- Pozovite funkciju zeroDivision i prosljeđivanje argumentima a i b, odnosno 11 i 0. Rezultat ove operacije bit će pohranjen u varijablu c.
- Ispišite vrijednost varijable c na konzoli.
- Kraj tijela bloka try / catch.
- Uhvatite iznimku. Vraćena poruka pogreške pohranit će se u poruci varijable.
- Ispišite povratnu poruku o pogrešci na konzoli.
- Kraj tijela bloka za ulov.
- Program bi trebao vratiti vrijednost nakon uspješnog izvršavanja.
- Kraj tijela glavne () funkcije.
C ++ standardne iznimke
C ++ dolazi s popisom standardnih iznimaka definiranih u klasi
Iznimka | Opis |
std :: iznimka | Ovo je iznimka i nadređena klasa svih standardnih iznimaka C ++. |
std :: bad_alloc | Ovu iznimku postavlja nova ključna riječ. |
std :: bad_cast | Ovo je iznimka koju je izbacio dynamic_cast. |
std :: loš_izuzetak | Koristan uređaj za rukovanje neočekivanim iznimkama u programima C ++. |
std :: bad_typeid | Iznimka koju je dao typeid. |
std :: error_error | Ova se iznimka teoretski može otkriti čitanjem koda. |
std :: greška_domene | Ovo je izuzetak izbačen nakon upotrebe matematički neispravne domene. |
std :: invalid_argument | Iznimka izbačena zbog korištenja nevaljanih argumenata. |
std :: dužina_pogreška | Iznimka izbačena nakon stvaranja velikog std :: stringa. |
std :: out_of_range | Bačeno metodom at. |
std :: runtime_error | Ovo je iznimka koja se ne može otkriti čitanjem koda. |
std :: overflow_error | Ova se iznimka izbacuje nakon pojave matematičkog prelijevanja. |
std :: range_error | Ova se iznimka izbacuje kada pokušavate pohraniti vrijednost izvan dosega. |
std :: underflow_error | Iznimka izbačena nakon pojave matematičkog podlijevanja. |
Korisnički definirane iznimke
Klasa C ++ std :: iznimka omogućuje nam definiranje objekata koji se mogu izuzeti. Ova je klasa definirana u zaglavlju
Ova funkcija vraća slijed slova tipa char * koji završava nulom. Možemo ga prepisati u izvedene klase kako bi imali opis iznimke.
Primjer:
#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;}
Izlaz:
Evo snimke zaslona koda:
Objašnjenje koda:
- Uključite datoteku zaglavlja iostream u naš program. Koristit ćemo njegove funkcije bez pogrešaka.
- Uključite datoteku zaglavlja iznimke u naš program. Koristit ćemo njegove funkcije poput onoga bez pogrešaka.
- Uključite std prostor imena u naš program da koristi njegove klase bez poziva.
- Stvorite novu klasu pod nazivom newException. Ova klasa nasljeđuje klasu iznimke C ++.
- Početak razrednog tijela.
- Prepišite funkciju virtualnog člana ono () definirano u datoteci zaglavlja iznimke. Zatim ćemo opisati vlastitu iznimku, novu iznimku.
- Započnite definiciju nove iznimke.
- Poruka koju treba vratiti ako se uhvati nova iznimka.
- Kraj definicije nove iznimke.
- Kraj tijela klase newException. Newex je naziv koji se koristi za hvatanje naše nove iznimke, nakon čega će se pozvati newException.
- Pozovite glavnu () funkciju. Logiku programa treba dodati unutar svog tijela. {Označava početak svog tijela.
- Koristite izjavu try za označavanje koda unutar kojeg trebamo označiti iznimku. Oznaka {označava početak tijela bloka try / catch. Kôd okružen ovim postat će zaštićen.
- Bacite izuzetak newex ako je uhvaćen.
- Kraj tijela pokušaja.
- Upotrijebite izjavu catch da biste uhvatili iznimku. Poruka o pogrešci iznimke pohranit će se u varijablu ex.
- Ispišite poruku o pogrešci iznimke na konzoli.
- Kraj teksta izjave o ulovu.
- Program bi trebao vratiti vrijednost ako se uspješno izvrši.
- Kraj tijela glavne () funkcije.
Sažetak:
- Uz rukovanje iznimkama u C ++-u, možete se nositi s pogreškama u izvršavanju.
- Runtime greške su pogreške koje se javljaju tijekom izvršavanja programa.
- Rukovanje iznimkama pomaže vam u rješavanju svih neočekivanih okolnosti u vašem programu.
- Kada se dogodi neočekivana okolnost, kontrola programa prenosi se na rukovatelje.
- Da biste ulovili iznimku, stavite odjeljak koda ispod bloka try-catch.
- Ključna riječ throw pomaže programu da izbaci iznimke, pomažući programu da riješi problem.
- Ključna riječ try pomaže identificirati blok koda za koji će se aktivirati određene iznimke.
- Možemo prepisati funkciju what () datoteke zaglavlja iznimke da definiramo naše iznimke.