Spracovanie výnimiek v C ++: Vyskúšajte, chyťte, hodte príklad

Obsah:

Anonim

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

Výkon:

Tu je snímka obrazovky s kódom:

Vysvetlenie kódu:

  1. Zahrňte do programu iostream hlavičkový súbor, aby ste mohli využívať jeho funkcie.
  2. Zahrňte do programu vektorový hlavičkový súbor, aby ste mohli využívať jeho funkcie.
  3. Zahrňte štandardný priestor mien do programu do svojich tried bez toho, aby ste ho volali.
  4. Zavolajte funkciu main (). Logika programu by mala byť pridaná do jeho tela.
  5. Vytvorte vektor s názvom vec na ukladanie celočíselných údajov.
  6. Pridajte prvok 0 do vektora s názvom vec.
  7. Pridajte prvok 1 do vektora s názvom vec.
  8. Komentár. Bude preskočený kompilátorom C ++.
  9. 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.
  10. 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.
  11. Koniec tela bloku pokus / úlovok.
  12. Chytiť výnimku. Vrátená chybová správa bude uložená v premennej ex.
  13. Ak sa vyskytne výnimka, vytlačte na konzolu správu.
  14. Koniec tela záchytného bloku.
  15. Po úspešnom vykonaní by program mal vrátiť hodnotu.
  16. Koniec hlavného () funkčného tela.

Príklad 2:

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

Výkon:

Tu je snímka obrazovky s kódom:

Vysvetlenie kódu:

  1. Zahrňte do programu iostream hlavičkový súbor, aby ste mohli využívať jeho funkcie.
  2. Zahrňte štandardný priestor mien do programu do svojich tried bez toho, aby ste ho volali.
  3. Vytvorte funkciu s názvom zeroDivision, ktorá bude obsahovať dva celočíselné argumenty, x a y. Funkcia by mala vrátiť dvojitý výsledok.
  4. Pomocou príkazu if skontrolujte, či je hodnota premenného argumentu y 0. {{označuje začiatok tela if.
  5. Správa, ktorá sa má vrátiť / vyhodiť, ak je y 0.
  6. Koniec tela príkazu if.
  7. Funkcia zeroDivision by mala vrátiť hodnotu x / y.
  8. Koniec tela funkcie zeroDivision.
  9. Zavolajte metódu main (). {Označuje začiatok tejto metódy.
  10. Deklarujte celočíselnú premennú a priraďte jej hodnotu 11.
  11. Deklarujte celočíselnú premennú b a priraďte jej hodnotu 0.
  12. Deklarujte dvojitú premennú c a priraďte jej hodnotu 0.
  13. 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.
  14. Zavolajte funkciu zeroDivision a odovzdajte argumentom a a b, teda 11 a 0. Výsledok tejto operácie sa uloží do premennej c.
  15. Vytlačte na konzole hodnotu premennej c.
  16. Koniec tela bloku pokus / úlovok.
  17. Chytiť výnimku. Vrátená chybová správa sa uloží do správy s premennou.
  18. Vytlačte vrátené chybové hlásenie na konzole.
  19. Koniec tela záchytného bloku.
  20. Po úspešnom vykonaní by program mal vrátiť hodnotu.
  21. 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 . Tieto sú popísané nižšie:

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í . Trieda nám poskytuje funkciu virtuálneho člena s názvom what.

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:

  1. Zahrňte do nášho programu hlavičkový súbor iostream. Budeme používať jeho funkcie bez toho, aby sme dostali chyby.
  2. Zahrňte do nášho programu hlavičkový súbor výnimky. Budeme využívať jeho funkcie ako čo bez chýb.
  3. Zahrňte do nášho programu std namespace, aby ste mohli používať jeho triedy bez toho, aby ste ich volali.
  4. Vytvorte novú triedu s názvom newException. Táto trieda dedí triedu výnimiek C ++.
  5. Začiatok triedy.
  6. 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.
  7. Začnite definíciu novej výnimky.
  8. Správa, ktorá sa má vrátiť, ak sa zachytí nová výnimka.
  9. Koniec definície novej výnimky.
  10. 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.
  11. Zavolajte funkciu main (). Logika programu by mala byť pridaná do jeho tela. {Označuje začiatok jeho tela.
  12. 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ý.
  13. Ak je chytená, zahoďte výnimku newex.
  14. Koniec vyskúšaného tela.
  15. Na zachytenie výnimky použite príkaz catch. Chybové hlásenie o výnimke bude uložené v premennej ex.
  16. Vytlačte chybové hlásenie o výnimke na konzolu.
  17. Koniec textu vyhlásenia o úlovku.
  18. Program by mal vrátiť hodnotu, ak sa úspešne spustí.
  19. 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.