Čo je spracovanie výnimiek v C ++?
Spracovanie výnimiek v C ++ vám poskytuje spôsob riešenia neočakávaných okolností, ako sú chyby za behu. Takže kedykoľvek dôjde k neočakávanej okolnosti, riadenie programu sa prevedie na špeciálne funkcie známe ako obslužné programy.
Aby ste zachytili výnimky, umiestnite časť kódu pod kontrolu výnimiek. Časť kódu je umiestnená v bloku try-catch.
Ak v tejto časti kódu dôjde k výnimočnej situácii, bude vyvolaná výnimka. Ďalej kontrolu nad programom prevezme obslužný program výnimiek.
V prípade, že nenastanú nijaké výnimočné okolnosti, vykoná sa kód normálne. Pracovníci budú ignorovaní.
V tomto výučbe pre C ++ sa dozviete:
- Čo je spracovanie výnimiek v C ++?
- Prečo spracovanie výnimiek?
- Kľúčové slová týkajúce sa spracovania výnimiek
- Syntax:
- Štandardné výnimky v C ++
- Užívateľom definované výnimky
Prečo spracovanie výnimiek?
Tu sú dôvody pre použitie spracovania výnimiek v C ++:
- Oddelíte kód na spracovanie chýb od normálneho. Kód bude čitateľnejší a bude sa ľahšie udržiavať.
- Funkcie dokážu spracovať výnimky, ktoré si vyberú. Aj keď funkcia vyvolá veľa výnimiek, zvládne iba niektoré. Volajúci spracuje nezachytené výnimky.
Kľúčové slová týkajúce sa spracovania výnimiek
Spracovanie výnimiek v C ++ sa točí okolo týchto troch kľúčových slov:
- hod - keď program narazí na problém, vyvolá výnimku. Kľúčové slovo vrhať pomáha programu pri vhadzovaní.
- catch - program používa na zachytenie výnimky obslužný program výnimky. Pridáva sa do časti programu, kde musíte problém vyriešiť. Robí sa to pomocou kľúčového slova catch.
- try - blok try identifikuje blok kódu, pre ktorý sa aktivujú určité výnimky. Po ňom by mal nasledovať jeden / viac blokov úlovku.
Predpokladajme, že blok kódu vyvolá výnimku. Výnimku zachytí metóda používajúca kľúčové slová try and catch. Blok try / catch by mal obklopovať kód, ktorý môže spôsobiť výnimku. Takýto kód sa nazýva chránený kód.
Syntax:
Try / catch má túto syntax:
try {// the protected code} catch( Exception_Name exception1 ) {// catch block} catch( Exception_Name exception2 ) {// catch block} catch( Exception_Name exceptionN ) {// catch block}
- Aj keď máme jeden príkaz na vyskúšanie, môžeme mať veľa príkazov na chytenie.
- Názov výnimky je názov výnimky, ktorá sa má zachytiť.
- Výnimka1, výnimka2 a výnimkaN sú vaše definované názvy odkazujúce na výnimky.
Príklad 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;}
Výkon:
Tu je snímka obrazovky s kódom:
Vysvetlenie kódu:
- Zahrňte do programu iostream hlavičkový súbor, aby ste mohli využívať jeho funkcie.
- Zahrňte do programu vektorový hlavičkový súbor, aby ste mohli využívať jeho funkcie.
- Zahrňte štandardný priestor mien do programu do svojich tried bez toho, aby ste ho volali.
- Zavolajte funkciu main (). Logika programu by mala byť pridaná do jeho tela.
- Vytvorte vektor s názvom vec na ukladanie celočíselných údajov.
- Pridajte prvok 0 do vektora s názvom vec.
- Pridajte prvok 1 do vektora s názvom vec.
- Komentár. Bude preskočený kompilátorom C ++.
- Pomocou príkazu try môžete zachytiť výnimku. {Označuje začiatok tela bloku try / catch. Kód pridaný do tela sa stane chráneným kódom.
- Pokúste sa získať prístup k prvku uloženému v indexe 2 (tretí prvok) vektora s názvom vec. Tento prvok neexistuje.
- Koniec tela bloku pokus / úlovok.
- Chytiť výnimku. Vrátená chybová správa bude uložená v premennej ex.
- Ak sa vyskytne výnimka, vytlačte na konzolu správu.
- Koniec tela záchytného bloku.
- Po úspešnom vykonaní by program mal vrátiť hodnotu.
- Koniec hlavného () funkčného tela.
Príklad 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;}
Výkon:
Tu je snímka obrazovky s kódom:
Vysvetlenie kódu:
- Zahrňte do programu iostream hlavičkový súbor, aby ste mohli využívať jeho funkcie.
- Zahrňte štandardný priestor mien do programu do svojich tried bez toho, aby ste ho volali.
- Vytvorte funkciu s názvom zeroDivision, ktorá bude obsahovať dva celočíselné argumenty, x a y. Funkcia by mala vrátiť dvojitý výsledok.
- Pomocou príkazu if skontrolujte, či je hodnota premenného argumentu y 0. {{označuje začiatok tela if.
- Správa, ktorá sa má vrátiť / vyhodiť, ak je y 0.
- Koniec tela príkazu if.
- Funkcia zeroDivision by mala vrátiť hodnotu x / y.
- Koniec tela funkcie zeroDivision.
- Zavolajte metódu main (). {Označuje začiatok tejto metódy.
- Deklarujte celočíselnú premennú a priraďte jej hodnotu 11.
- Deklarujte celočíselnú premennú b a priraďte jej hodnotu 0.
- Deklarujte dvojitú premennú c a priraďte jej hodnotu 0.
- Pomocou príkazu try môžete zachytiť výnimku. {Označuje začiatok tela bloku try / catch. Kód pridaný do tela sa stane chráneným kódom.
- Zavolajte funkciu zeroDivision a odovzdajte argumentom a a b, teda 11 a 0. Výsledok tejto operácie sa uloží do premennej c.
- Vytlačte na konzole hodnotu premennej c.
- Koniec tela bloku pokus / úlovok.
- Chytiť výnimku. Vrátená chybová správa sa uloží do správy s premennou.
- Vytlačte vrátené chybové hlásenie na konzole.
- Koniec tela záchytného bloku.
- Po úspešnom vykonaní by program mal vrátiť hodnotu.
- Koniec hlavného () funkčného tela.
Štandardné výnimky v C ++
C ++ je dodávaný so zoznamom štandardných výnimiek definovaných v triede
Výnimka | Popis |
std :: výnimka | Toto je výnimka a nadradená trieda všetkých štandardných výnimiek v C ++. |
std :: bad_alloc | Túto výnimku vyvoláva nové kľúčové slovo. |
std :: bad_cast | Toto je výnimka vyvolaná aplikáciou dynamic_cast. |
std :: bad_exception | Užitočné zariadenie na spracovanie neočakávaných výnimiek v programoch C ++. |
std :: bad_typeid | Výnimka vyvolaná typom. |
std :: logic_error | Táto výnimka je teoreticky zistiteľná načítaním kódu. |
std :: chyba_domény | Toto je výnimka vyvolaná po použití matematicky neplatnej domény. |
std :: invalid_argument | Výnimka vyvolaná použitím neplatných argumentov. |
std :: length_error | Výnimka vyvolaná po vytvorení veľkého reťazca std ::. |
std :: out_of_range | Vyhodený metódou at. |
std :: runtime_error | Toto je výnimka, ktorú nie je možné zistiť načítaním kódu. |
std :: overflow_error | Táto výnimka sa vyvolá po výskyte matematického pretečenia. |
std :: range_error | Táto výnimka sa vyvolá, keď sa pokúsite uložiť hodnotu mimo rozsahu. |
std :: underflow_error | Výnimka vyvolaná po výskyte matematického podtečenia. |
Užívateľom definované výnimky
Trieda C ++ std :: exception nám umožňuje definovať objekty, ktoré môžu byť vyhodené ako výnimky. Táto trieda bola definovaná v záhlaví
Táto funkcia vracia znakovú sekvenciu zakončenú nulou typu char *. Môžeme to prepísať v odvodených triedach, aby sme mali popis výnimky.
Príklad:
#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ýkon:
Tu je snímka obrazovky s kódom:
Vysvetlenie kódu:
- Zahrňte do nášho programu hlavičkový súbor iostream. Budeme používať jeho funkcie bez toho, aby sme dostali chyby.
- Zahrňte do nášho programu hlavičkový súbor výnimky. Budeme využívať jeho funkcie ako čo bez chýb.
- Zahrňte do nášho programu std namespace, aby ste mohli používať jeho triedy bez toho, aby ste ich volali.
- Vytvorte novú triedu s názvom newException. Táto trieda dedí triedu výnimiek C ++.
- Začiatok triedy.
- Prepíše funkciu virtuálneho člena what () definovanú v súbore hlavičky výnimky. Potom si popíšeme našu vlastnú výnimku, novú výnimku.
- Začnite definíciu novej výnimky.
- Správa, ktorá sa má vrátiť, ak sa zachytí nová výnimka.
- Koniec definície novej výnimky.
- Koniec tela triedy newException. Newex je názov, ktorý sa má použiť na zachytenie našej novej výnimky, po ktorej sa bude volať newException.
- Zavolajte funkciu main (). Logika programu by mala byť pridaná do jeho tela. {Označuje začiatok jeho tela.
- Pomocou príkazu try označte kód, v rámci ktorého musíme označiť výnimku. {Označuje začiatok tela bloku try / catch. Kód obklopený týmto bude chránený.
- Ak je chytená, zahoďte výnimku newex.
- Koniec vyskúšaného tela.
- Na zachytenie výnimky použite príkaz catch. Chybové hlásenie o výnimke bude uložené v premennej ex.
- Vytlačte chybové hlásenie o výnimke na konzolu.
- Koniec textu vyhlásenia o úlovku.
- Program by mal vrátiť hodnotu, ak sa úspešne spustí.
- Koniec tela hlavnej () funkcie.
Zhrnutie:
- Vďaka spracovaniu výnimiek v C ++ môžete spracovať chyby za behu.
- Chyby runtime sú chyby, ktoré sa vyskytnú počas vykonávania programu.
- Spracovanie výnimiek vám pomôže zvládnuť akékoľvek neočakávané okolnosti vo vašom programe.
- Keď nastane neočakávaná okolnosť, riadenie programu sa prenesie na obslužné programy.
- Ak chcete chytiť výnimku, umiestnite časť kódu pod blok try-catch.
- Kľúčové slovo throw pomáha programu pri vyhadzovaní výnimiek a pomáha programu pri riešení problému.
- Kľúčové slovo try pomáha identifikovať blok kódu, pre ktorý sa aktivujú určité výnimky.
- Môžeme prepísať funkciu what () súboru hlavičky výnimky, aby sme definovali naše výnimky.