Industriële fabricage
Industrieel internet der dingen | Industriële materialen | Onderhoud en reparatie van apparatuur | Industriële programmering |
home  MfgRobots >> Industriële fabricage >  >> Industrial programming >> C Taal

C++ Exception Handling: Praktische Try, Catch, Throw Voorbeelden

Wat is Exception Handling in C++?

Exception handling laat C++‑programma's op een nette manier herstellen van onverwachte runtime‑fouten. Wanneer een fout optreedt, springt de controle naar een specifieke handler die kan beslissen hoe te reageren.

Door potentieel problematische code in een try-blok te plaatsen en dit te volgen met een of meer catch-clauses, geef je het programma een duidelijk pad om uitzonderlijke condities te beheren.

Als geen exception gegooid wordt, draait het try-blok normaal en worden de handlers overgeslagen.

In deze tutorial leer je:

  • Wat exception handling is en waarom het belangrijk is
  • De kern‑keywords: throw, catch, try
  • Syntaxis en veelvoorkomende patronen
  • Standaardexceptions gedefinieerd door de C++ Standard Library
  • Hoe je user‑defined exceptions creëert en gebruikt

Waarom Exception Handling?

Exception handling biedt diverse concrete voordelen:

  • Scheidt foutafhandelingslogica van reguliere code, wat leesbaarheid en onderhoudbaarheid verbetert.
  • Stelt functies in staat om alleen de exceptions te exposen waar ze om geven; callers kunnen de rest afhandelen.

Belangrijkste Exception Handling Keywords

Drie keywords vormen de ruggengraat van C++ exception handling:

  • throw – signaleert een foutconditie door een exception‑object aan te maken.
  • catch – vangt een exception op en biedt code om erop te reageren.
  • try – markeert het coderegio dat exceptions kan gooien.

Code binnen het try-blok heet beschermde code; als het gooit, wordt de bijbehorende catch-blok uitgevoerd.

Syntaxis

 try { // beschermde code } catch (Exception_Name exception1) { // handle exception1 } catch (Exception_Name exception2) { // handle exception2 } // ... meer catch‑blokken 
  • Een enkel try kan gevolgd worden door meerdere catch-clauses.
  • Het type in elke catch-clause specificeert de op te vangen exception.
  • Binnen een catch kan de gevangen exception worden gerefereerd door de gekozen identificator.

Voorbeeld 1: Vector‑Element Buiten Bereik Benaderen

#include<iostream>
#include<vector>
using namespace std;
int main() {
    vector<int> vec;
    vec.push_back(0);
    vec.push_back(1);
    try {
        vec.at(2); // out of range
    } catch (exception& ex) {
        cout << "Exception occurred!" << endl;
    }
    return 0;
 } 

Output:

C++ Exception Handling: Praktische Try, Catch, Throw Voorbeelden

Hier is een screenshot van de code:

C++ Exception Handling: Praktische Try, Catch, Throw Voorbeelden

Code‑analyse:

  1. Include iostream en vector voor I/O en container‑ondersteuning.
  2. Gebruik de std-naamruimte om volledig‑gekwalificeerde namen te vermijden.
  3. Instantieer een vector<int> en vul het.
  4. Probeer een element buiten de grenzen van de vector te benaderen binnen een try-blok.
  5. Vang de standaard std::exception en geef een bericht weer.
  6. Return vanuit main.

Voorbeeld 2: Delen door Nul Afhandelen

#include <iostream>
using namespace std;
double zeroDivision(int x, int y) {
    if (y == 0) {
        throw "Division by Zero!";
    }
    return static_cast(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;
 } 

Output:

C++ Exception Handling: Praktische Try, Catch, Throw Voorbeelden

Hier is een screenshot van de code:

C++ Exception Handling: Praktische Try, Catch, Throw Voorbeelden

Code‑analyse:

  1. Definieer zeroDivision die een C‑string gooit bij deling door nul.
  2. Roep de functie aan binnen een try-blok en print het resultaat.
  3. Vang de string‑exception op en geef een foutmelding weer.

C++ Standaardexceptions

C++ Exception Handling: Praktische Try, Catch, Throw Voorbeelden

De Standard Library declareert een rijke hiërarchie van exceptions in <exception>. Hieronder de meest gebruikte:

ExceptionBeschrijving
std::exceptionBasisklasse voor alle standardexceptions.
std::bad_allocGegooid door new bij allocatiefout.
std::bad_castGegooid door dynamic_cast wanneer een cast faalt.
std::bad_exceptionGebruikt om een onverwachte exception te signaleren.
std::bad_typeidGegooid door typeid op een glvalue van een polymorfe type dat null is.
std::logic_errorFouten die door de programmeur detecteerbaar zouden moeten zijn.
std::domain_errorOngeldig domein voor een wiskundige functie.
std::invalid_argumentFunctie ontving een ongeldig argument.
std::length_errorPoging een string te creëren die te groot is.
std::out_of_rangeGegooid door vector::at als index out of bounds is.
std::runtime_errorRuntime‑fouten niet gevangen door andere categorieën.
std::overflow_errorWiskundige overflow opgetreden.
std::range_errorWaarde buiten bereik voor de operatie.
std::underflow_errorWiskundige underflow opgetreden.

User‑Defined Exceptions

De std::exception-basisklasse kan uitgebreid worden om domein‑specifieke fouttypen te creëren. Het overschrijven van what() levert een beschrijvend bericht.

Voorbeeld: Custom Exception

#include <iostream>
#include <exception>
using namespace std;
class NewException : public exception {
public:
    const char* what() const noexcept override {
        return "newException occurred";
    }
} newex;
int main() {
    try {
        throw newex;
    } catch (exception& ex) {
        cout << ex.what() << '\n';
    }
    return 0;
 } 

Output:

C++ Exception Handling: Praktische Try, Catch, Throw Voorbeelden

Hier is een screenshot van de code:

C++ Exception Handling: Praktische Try, Catch, Throw Voorbeelden

Code‑analyse:

  1. Afleiden van NewException van std::exception en what() overschrijven.
  2. Instantieer een object newex om te gooien.
  3. Gooien newex binnen een try-blok.
  4. Vangen per referentie naar std::exception en print het bericht via what().

Kernpunten

  • Exception handling is essentieel voor robuuste C++‑applicaties die van runtime‑fouten moeten herstellen.
  • Gebruik try om code te beschermen, catch om te reageren, en throw om problemen te signaleren.
  • Profiteer van de rijke set standardexceptions, en breid std::exception uit wanneer custom fouttypen nodig zijn.
  • Houd foutafhandelingslogica gescheiden van business‑logica voor schonere, onderhoudbare code.

C Taal

  1. C++ comments: best practices voor leesbare, onderhoudbare code
  2. C++ Operators Uitgelegd: Typen, Voorbeelden en Voorbeeldprogramma's
  3. C++ Switch‑Case Onder de Knie: Syntaxis, Gebruik en Praktische Voorbeelden
  4. C++ Dynamische Array‑Allocatie: Praktische Handleiding met Code‑Voorbeelden
  5. C++ Structs Uitgelegd met een Praktisch Voorbeeld
  6. Beheersen van std::list in C++: Syntaxis, Functies & Praktische Voorbeelden
  7. C++ Struct vs Class: Belangrijkste Verschillen, Syntaxis en Beste Gebruikssituaties
  8. 15 Beste C++ IDE's voor Windows, macOS & Linux – Gratis & Betaalde Opties (2021)
  9. Python-exception handling: try, except, else en finally uitgelegd
  10. Java Exception Handling meesteren: Try, Catch, Finally, Throw & Throws uitgelegd
  11. Java Exception Handling meesteren: Try, Catch, Finally en Resources