Zpracování výjimek v C ++: Try, Catch, throw Example

Obsah:

Anonim

Co je zpracování výjimek v C ++?

Zpracování výjimek v C ++ vám poskytuje způsob řešení neočekávaných okolností, jako jsou chyby za běhu. Takže kdykoli dojde k neočekávané situaci, ovládací prvek programu se přenese na speciální funkce známé jako obslužné rutiny.

Chcete-li zachytit výjimky, umístěte část kódu pod kontrolu výjimek. Část kódu je umístěna v bloku try-catch.

Pokud v této části kódu dojde k výjimečné situaci, bude vyvolána výjimka. Dále obslužný program výjimky převezme kontrolu nad programem.

V případě, že nenastanou žádné výjimečné okolnosti, kód se spustí normálně. Obslužné rutiny budou ignorovány.

V tomto výukovém programu C ++ se naučíte:

  • Co je zpracování výjimek v C ++?
  • Proč zpracování výjimek?
  • Klíčová slova pro zpracování výjimek
  • Syntax:
  • Standardní výjimky C ++
  • Uživatelem definované výjimky

Proč zpracování výjimek?

Tady jsou důvody pro použití zpracování výjimek v C ++:

  • Oddělíte kód pro zpracování chyb od normálního kódu. Kód bude čitelnější a snadněji se udržuje.
  • Funkce mohou zpracovat výjimky, které si vyberou. I když funkce vyvolá mnoho výjimek, zvládne pouze některé. Volající zpracuje nezachycené výjimky.

Klíčová slova pro zpracování výjimek

Zpracování výjimek v C ++ se točí kolem těchto tří klíčových slov:

  • throw - když program narazí na problém, vyvolá výjimku. Klíčové slovo throw pomáhá programu provést throw.
  • catch - program používá k zachycení výjimky obslužnou rutinu výjimky. Přidá se do části programu, kde je třeba problém vyřešit. Dělá se to pomocí klíčového slova catch.
  • try - blok try identifikuje blok kódu, pro který budou aktivovány určité výjimky. Po něm by měl následovat jeden / více bloků úlovku.

Předpokládejme, že blok kódu vyvolá výjimku. Výjimku zachytí metoda používající klíčová slova try and catch. Blok try / catch by měl obklopovat kód, který může vyvolat výjimku. Takový kód se nazývá chráněný kód.

Syntax:

Try / catch má tuto syntaxi:

try {// the protected code} catch( Exception_Name exception1 ) {// catch block} catch( Exception_Name exception2 ) {// catch block} catch( Exception_Name exceptionN ) {// catch block}
  • I když máme jeden příkaz try, můžeme mít mnoho příkazů catch.
  • Název výjimky je název výjimky, která se má zachytit.
  • The exception1, exception2, and exceptionN are your defined names for referring to the exceptions.

Pří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ýstup:

Zde je snímek obrazovky s kódem:

Vysvětlení kódu:

  1. Chcete-li používat jeho funkce, zahrňte do programu soubor záhlaví iostream.
  2. Chcete-li používat jeho funkce, zahrňte do programu vektorový záhlaví.
  3. Zahrňte standardní obor jmen do programu do jeho tříd, aniž byste jej volali.
  4. Zavolejte funkci main (). Logika programu by měla být přidána do jeho těla.
  5. Vytvořte vektor s názvem vec pro ukládání celočíselných dat.
  6. Přidejte prvek 0 do vektoru s názvem vec.
  7. Přidejte prvek 1 do vektoru s názvem vec.
  8. Komentář. Bude přeskočen kompilátorem C ++.
  9. Pomocí příkazu try můžete zachytit výjimku. {Označuje začátek těla bloku try / catch. Kód přidaný do těla se stane chráněným kódem.
  10. Zkuste získat přístup k prvku uloženému v indexu 2 (třetí prvek) vektoru s názvem vec. Tento prvek neexistuje.
  11. Konec těla bloku try / catch.
  12. Chyťte výjimku. Vrácená chybová zpráva bude uložena v proměnné ex.
  13. Pokud je výjimka chycena, vytiskněte na konzoli nějakou zprávu.
  14. Konec těla západkového bloku.
  15. Program by měl po úspěšném provedení vrátit hodnotu.
  16. Konec hlavního () funkčního těla.

Pří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ýstup:

Zde je snímek obrazovky s kódem:

Vysvětlení kódu:

  1. Chcete-li používat jeho funkce, zahrňte do programu soubor záhlaví iostream.
  2. Zahrňte standardní obor jmen do programu do jeho tříd, aniž byste jej volali.
  3. Vytvořte funkci s názvem zeroDivision, která přebírá dva celočíselné argumenty, x a y. Funkce by měla vrátit dvojitý výsledek.
  4. Pomocí příkazu if zkontrolujte, zda je hodnota proměnného argumentu y 0. {označuje začátek těla if.
  5. Zpráva, která má být vrácena / vyvolána, pokud y je 0.
  6. Konec těla příkazu if.
  7. Funkce zeroDivision by měla vrátit hodnotu x / y.
  8. Konec těla funkce zeroDivision.
  9. Zavolejte metodu main (). {Označuje začátek této metody.
  10. Deklarujte celočíselnou proměnnou a přiřaďte jí hodnotu 11.
  11. Deklarujte celočíselnou proměnnou b a přiřaďte jí hodnotu 0.
  12. Deklarujte dvojitou proměnnou c a přiřaďte jí hodnotu 0.
  13. Pomocí příkazu try můžete zachytit výjimku. {Označuje začátek těla bloku try / catch. Kód přidaný do těla se stane chráněným kódem.
  14. Zavolejte funkci zeroDivision a předejte argumentům a a b, tj. 11 a 0. Výsledek této operace bude uložen v proměnné c.
  15. Vytiskněte na konzole hodnotu proměnné c.
  16. Konec těla bloku try / catch.
  17. Chyťte výjimku. Vrácená chybová zpráva bude uložena v proměnné zprávě.
  18. Vytiskněte vrácenou chybovou zprávu na konzole.
  19. Konec těla západkového bloku.
  20. Program by měl po úspěšném provedení vrátit hodnotu.
  21. Konec hlavního () funkčního těla.

Standardní výjimky C ++

C ++ přichází se seznamem standardních výjimek definovaných ve třídě . Jsou popsány níže:

Výjimka Popis
std :: výjimka Toto je výjimka a nadřazená třída všech standardních výjimek C ++.
std :: bad_alloc Tato výjimka je vyvolána novým klíčovým slovem.
std :: bad_cast Toto je výjimka vyvolaná dynamic_cast.
std :: bad_exception Užitečné zařízení pro zpracování neočekávaných výjimek v programech C ++.
std :: bad_typeid Výjimka vyvolaná typem.
std :: logic_error Tuto výjimku lze teoreticky zjistit načtením kódu.
std :: chyba_domény Toto je výjimka vyvolaná po použití matematicky neplatné domény.
std :: invalid_argument Vyvolána výjimka pro použití neplatných argumentů.
std :: length_error Výjimka vyvolaná po vytvoření velkého std :: řetězce.
std :: out_of_range Metoda vyvolána metodou.
std :: runtime_error Toto je výjimka, kterou nelze zjistit čtením kódu.
std :: overflow_error Tato výjimka je vyvolána po výskytu matematického přetečení.
std :: range_error Tato výjimka je vyvolána při pokusu o uložení hodnoty mimo rozsah.
std :: underflow_error Výjimka vyvolaná po výskytu matematického podtečení.

Uživatelem definované výjimky

Třída C ++ std :: exception nám umožňuje definovat objekty, které mohou být vyvolány jako výjimky. Tato třída byla definována v záhlaví . Třída nám poskytuje virtuální členskou funkci s názvem what.

Tato funkce vrací sekvenci znaků s nulovým zakončením typu char *. Můžeme jej přepsat v odvozených třídách, abychom měli popis výjimky.

Pří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ýstup:

Zde je snímek obrazovky s kódem:

Vysvětlení kódu:

  1. Zahrňte soubor záhlaví iostream do našeho programu. Budeme používat jeho funkce bez chyb.
  2. Zahrňte soubor záhlaví výjimky do našeho programu. Budeme používat jeho funkce jako co bez chyb.
  3. Zahrňte do našeho programu standardní obor názvů, abyste mohli používat jeho třídy, aniž byste jej volali.
  4. Vytvořte novou třídu s názvem newException. Tato třída dědí třídu výjimek C ++.
  5. Začátek těla třídy.
  6. Přepsat virtuální členskou funkci what () definovanou v souboru záhlaví výjimky. Poté popíšeme naši vlastní výjimku, novou výjimku.
  7. Spusťte definici nové výjimky.
  8. Zpráva, která se má vrátit, pokud je zachycena nová výjimka.
  9. Konec definice nové výjimky.
  10. Konec těla třídy newException. Newex je název, který se má použít k zachycení naší nové výjimky, po které se zavolá newException.
  11. Zavolejte funkci main (). Logika programu by měla být přidána do jeho těla. {Označuje začátek jeho těla.
  12. Pomocí příkazu try označte kód, ve kterém musíme označit výjimku. {Označuje začátek těla bloku try / catch. Kód obklopený tímto bude chráněn.
  13. Vyhoďte výjimku newex, pokud je chycena.
  14. Konec zkušebního těla.
  15. Pomocí příkazu catch můžete zachytit výjimku. Chybová zpráva o výjimce bude uložena v proměnné ex.
  16. Na konzole vytiskněte chybovou zprávu o výjimce.
  17. Konec textu prohlášení o úlovku.
  18. Program by měl vrátit hodnotu, pokud se provede úspěšně.
  19. Konec těla funkce main ().

Souhrn:

  • Díky zpracování výjimek v C ++ můžete zpracovat chyby za běhu.
  • Chyby runtime jsou chyby, ke kterým dochází během provádění programu.
  • Zpracování výjimek vám pomůže zvládnout jakékoli neočekávané okolnosti ve vašem programu.
  • Když dojde k neočekávané situaci, řízení programu se přenese na obslužné rutiny.
  • Chcete-li zachytit výjimku, umístíte část kódu pod blok try-catch.
  • Klíčové slovo throw pomáhá programu vyvolávat výjimky a pomáhá programu zvládnout problém.
  • Klíčové slovo try pomáhá identifikovat blok kódu, pro který budou aktivovány určité výjimky.
  • Můžeme přepsat funkci what () souboru záhlaví výjimky, abychom definovali naše výjimky.