Kas ir izņēmumu apstrāde C ++ versijā?
Izņēmumu apstrāde C ++ sniedz jums iespēju apstrādāt neparedzētus apstākļus, piemēram, izpildlaika kļūdas. Tātad, kad rodas negaidīts apstāklis, programmas vadība tiek nodota īpašām funkcijām, kas pazīstamas kā apstrādātāji.
Lai uzzinātu izņēmumus, izņēmuma pārbaudē jūs ievietojat kādu koda sadaļu. Koda sadaļa tiek ievietota mēģinājuma noķeršanas blokā.
Ja šajā koda sadaļā notiek ārkārtas situācija, tiek izmests izņēmums. Pēc tam izņēmumu apstrādātājs pārņems programmas kontroli.
Gadījumā, ja nenotiek ārkārtas apstākļi, kods tiks izpildīts normāli. Apstrādātāji tiks ignorēti.
Šajā C ++ apmācībā jūs uzzināsiet:
- Kas ir izņēmumu apstrāde C ++ versijā?
- Kāpēc rīkoties ar izņēmumiem?
- Izņēmumu apstrādes atslēgvārdi
- Sintakse:
- C ++ standarta izņēmumi
- Lietotāja noteikti izņēmumi
Kāpēc rīkoties ar izņēmumiem?
Šeit ir iemesls izņēmumu apstrādes lietošanai C ++:
- Jūs atdalīsit kļūdu apstrādes kodu no parastā koda. Kods būs lasāmāks un vieglāk uzturams.
- Funkcijas var apstrādāt izvēlētos izņēmumus. Pat ja funkcija rada daudz izņēmumu, tā rīkosies tikai ar dažiem. Zvanītājs rīkosies ar nenotvertajiem izņēmumiem.
Izņēmumu apstrādes atslēgvārdi
Izņēmumu apstrāde C ++ ap šiem trim atslēgvārdiem:
- mest - kad programma sastopas ar problēmu, tā izmet. Metiena atslēgvārds palīdz programmai izpildīt metienu.
- catch - programma izmanto izņēmumu apstrādātāju, lai noķertu izņēmumu. Tas tiek pievienots programmas sadaļai, kurā jums jārisina problēma. Tas tiek darīts, izmantojot nozvejas atslēgvārdu.
- mēģināt - mēģinājuma bloks identificē koda bloku, kuram tiks aktivizēti noteikti izņēmumi. Tam vajadzētu sekot vienam / vairākiem bloķēšanas blokiem.
Pieņemsim, ka koda bloks radīs izņēmumu. Izņēmums tiks uztverts ar metodi, izmantojot atslēgvārdus “mēģināt un ķert”. Try / catch blokam jāpievieno kods, kas var radīt izņēmumu. Šāds kods ir pazīstams kā aizsargāts kods.
Sintakse:
Mēģinājums / ķeršana izmanto šo sintaksi:
try {// the protected code} catch( Exception_Name exception1 ) {// catch block} catch( Exception_Name exception2 ) {// catch block} catch( Exception_Name exceptionN ) {// catch block}
- Lai gan mums ir viens mēģinājuma paziņojums, mums var būt daudz nozvejas paziņojumu.
- ExceptionName ir noķeramā izņēmuma nosaukums.
- Izņēmums1, izņēmums2 un izņēmumsN ir jūsu definētie vārdi, lai atsauktos uz izņēmumiem.
1. piemērs:
#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;}
Izeja:
Šeit ir koda ekrānuzņēmums:
Koda skaidrojums:
- Iekļaujiet programmā iostream galvenes failu, lai izmantotu tā funkcijas.
- Iekļaujiet vektora galvenes failu programmā, lai izmantotu tā funkcijas.
- Iekļaujiet programmas standarta nosaukumvietu tās klasēs, to neizsaucot.
- Izsauciet galveno () funkciju. Programmas loģika jāpievieno tās pamattekstā.
- Lai saglabātu veselu skaitļu datus, izveidojiet vektoru ar nosaukumu vec.
- Pievienojiet elementu 0 vektoram ar nosaukumu vec.
- Pievienojiet elementu 1 vektoram ar nosaukumu vec.
- Komentārs. C ++ kompilators to izlaidīs.
- Izmantojiet mēģinājuma paziņojumu, lai noķertu izņēmumu. {Atzīmē try / catch bloka pamatteksta sākumu. Pamattekstā pievienotais kods kļūs par aizsargāto kodu.
- Mēģiniet piekļūt elementam, kas saglabāts vektora ar vec. Indeksu 2 (trešais elements). Šis elements nepastāv.
- Mēģinājuma / aizķeršanas bloka korpusa beigas.
- Noķeriet izņēmumu. Atgrieztais kļūdas ziņojums tiks saglabāts mainīgajā ex.
- Ja izņēmums ir noķerts, konsolē izdrukājiet kādu ziņojumu.
- Satveršanas bloka korpusa beigas.
- Pēc veiksmīgas izpildes programmai jāatgriež vērtība.
- Galvenās () funkcijas ķermeņa beigas.
2. piemērs:
#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;}
Izeja:
Šeit ir koda ekrānuzņēmums:
Koda skaidrojums:
- Iekļaujiet programmā iostream galvenes failu, lai izmantotu tā funkcijas.
- Iekļaujiet programmas standarta nosaukumvietu tās klasēs, to neizsaucot.
- Izveidojiet funkciju zeroDivision, kurai nepieciešami divi vesela skaitļa argumenti x un y. Funkcijai jāatgriežas ar dubultu rezultātu.
- Izmantojiet if paziņojumu, lai pārbaudītu, vai mainīgā argumenta y vērtība ir 0. {atzīmē if ķermeņa sākumu.
- Atgriežamais / izmetamais ziņojums, ja y ir 0.
- Ja paziņojuma pamatteksta beigas.
- Funkcijai zeroDivision jāatgriež x / y vērtība.
- Funkcijas zeroDivision korpusa beigas.
- Izsauciet metodi main (). {Apzīmē šīs metodes sākumu.
- Paziņojiet vesela skaitļa mainīgo un piešķiriet tam vērtību 11.
- Pasludiniet veselu skaitli mainīgo b un piešķirot tam vērtību 0.
- Deklarē dubultu mainīgo c un piešķir tam vērtību 0.
- Izmantojiet mēģinājuma paziņojumu, lai noķertu izņēmumu. {Atzīmē try / catch bloka pamatteksta sākumu. Pamattekstā pievienotais kods kļūs par aizsargāto kodu.
- Izsauciet zeroDivision funkciju un pārejot uz argumentiem a un b, tas ir, 11 un 0. Šīs operācijas rezultāts tiks saglabāts mainīgajā c.
- Konsolē izdrukājiet mainīgā c vērtību.
- Mēģinājuma / aizķeršanas bloka korpusa beigas.
- Noķeriet izņēmumu. Atgrieztais kļūdas ziņojums tiks saglabāts mainīgā ziņojumā.
- Konsolē izdrukājiet atgriezto kļūdas ziņojumu.
- Satveršanas bloka korpusa beigas.
- Pēc veiksmīgas izpildes programmai jāatgriež vērtība.
- Galvenās () funkcijas ķermeņa beigas.
C ++ standarta izņēmumi
C ++ nāk ar standarta izņēmumu sarakstu, kas definēti klasē
Izņēmums | Apraksts |
std :: izņēmums | Šis ir izņēmums un visu standarta C ++ izņēmumu vecāku klase. |
std :: bad_alloc | Šo izņēmumu nosaka jauns atslēgvārds. |
std :: bad_cast | Šis ir izņēmums, ko izmet dynamic_cast. |
std :: bad_exception | Noderīga ierīce neparedzētu izņēmumu apstrādei C ++ programmās. |
std :: bad_typeid | Izņēmums, ko izmeta tipids. |
std :: logic_error | Šis izņēmums teorētiski ir nosakāms, lasot kodu. |
std :: domain_error | Šis ir izņēmums pēc matemātiski nederīga domēna izmantošanas. |
std :: invalid_argument | Izņēmums par nederīgu argumentu izmantošanu. |
std :: length_error | Izņēmums, kas radies pēc lielas std :: virknes izveidošanas. |
std :: out_of_range | Meta pēc metodes. |
std :: runtime_error | Šis ir izņēmums, kuru nevar noteikt, lasot kodu. |
std :: overflow_error | Šis izņēmums tiek izmests pēc matemātiskas pārpildes. |
std :: range_error | Šis izņēmums tiek izmests, mēģinot saglabāt ārpus diapazona esošo vērtību. |
std :: underflow_error | Izņēmums, kas radies pēc matemātiskas nepietiekamas plūsmas. |
Lietotāja noteikti izņēmumi
C ++ std :: izņēmuma klase ļauj mums definēt objektus, kurus var izmest kā izņēmumus. Šī klase ir definēta galvenē
Šī funkcija atgriež char * tipa rakstzīmju secību ar nulles galu. Mēs varam to pārrakstīt atvasinātajās klasēs, lai būtu izņēmuma apraksts.
Piemērs:
#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;}
Izeja:
Šeit ir koda ekrānuzņēmums:
Koda skaidrojums:
- Iekļaujiet iostream galvenes failu mūsu programmā. Mēs izmantosim tā funkcijas bez kļūdām.
- Iekļaujiet mūsu programmā izņēmuma galvenes failu. Mēs izmantosim tās funkcijas, piemēram, kas bez kļūdām.
- Iekļaujiet standarta nosaukumvietu mūsu programmā, lai izmantotu tās klases, to neizsaucot.
- Izveidojiet jaunu klasi ar nosaukumu newException. Šī klase pārņem izņēmuma klasi C ++.
- Klases ķermeņa sākums.
- Pārrakstīt virtuālā dalībnieka funkciju, kas () definēta izņēmuma galvenes failā. Pēc tam mēs aprakstīsim mūsu pašu izņēmumu, jauno izņēmumu.
- Sāciet jaunā izņēmuma definīciju.
- Ziņojums, kas jāatgriež, ja tiek pieķerts jauns izņēmums.
- Jaunā izņēmuma definīcijas beigas.
- NewException klases pamatteksts. Newex ir nosaukums, kas jāizmanto, lai uztvertu mūsu jauno izņēmumu, pēc kura tiks izsaukts newException.
- Izsauciet galveno () funkciju. Programmas loģika jāpievieno tās pamattekstā. {Iezīmē tā ķermeņa sākumu.
- Izmantojiet mēģinājuma paziņojumu, lai atzīmētu kodu, kurā mums jāatzīmē izņēmums. {Atzīmē try / catch bloka pamatteksta sākumu. Kods, kuru ieskauj, kļūs aizsargāts.
- Mest newex izņēmumu, ja tas ir nozvejots.
- Izmēģinājuma ķermeņa beigas.
- Izmantojiet nozvejas paziņojumu, lai noķertu izņēmumu. Izņēmuma kļūdas ziņojums tiks saglabāts mainīgajā ex.
- Konsolē izdrukājiet izņēmuma kļūdas ziņojumu.
- Nozvejas paziņojuma pamatteksta beigas.
- Programmai jāatgriež vērtība, ja tā tiek veiksmīgi izpildīta.
- Galvenās () funkcijas ķermeņa beigas.
Kopsavilkums:
- Izņemot izņēmumu apstrādi C ++, jūs varat apstrādāt izpildlaika kļūdas.
- Izpildlaika kļūdas ir kļūdas, kas rodas programmas izpildes laikā.
- Izņēmumu apstrāde palīdz jums tikt galā ar visiem neparedzētiem apstākļiem jūsu programmā.
- Kad rodas negaidīts apstāklis, programmas vadība tiek nodota apstrādātājiem.
- Lai noķertu izņēmumu, jūs ievietojat koda sadaļu zem izmēģinājuma ķeršanas bloka.
- Metiena atslēgvārds palīdz programmai mest izņēmumus, palīdzot programmai tikt galā ar problēmu.
- Izmēģinājuma atslēgvārds palīdz identificēt kodu bloku, kuram tiks aktivizēti noteikti izņēmumi.
- Mēs varam pārrakstīt izņēmuma galvenes faila funkciju what (), lai definētu mūsu izņēmumus.