Pentru a trata erorile se folosesc blocurile try .. catch, ca in exemplul de mai jos:
Cod: |
#include using namespace std; int main () { try { throw 20; } catch (int e) { cout << "Exceptie aparuta cu nr. " <<> |
Sa luam pas cu pas exemplul. Tot codul de executat in care este posibil sa apara exceptiile e inclus in try {}. In acest exemplu este generata o exceptie cu numarul 20, care va fi tratata mai jos. Dupa codul din try{} urmeaza una sau mai multe instructiuni catch() pentru diverse tipuri de erori. In acest caz este prinsa doar eroarea de tip intreg.
De exemplu puteti avea asa:
Cod: |
try { // codul e aici } catch (int param) { cout << "Exceptie intreaga"; } catch (char param) { cout << "Exceptie de tip caracter"; } catch (...) { cout << "Orice alte exceptii"; } |
Dupa cum se vede se poate specifica prin '...' orice tip de exceptii netratata anterior.
La aparitia unei erori sint analizate toate instructiunile catch() iar daca una se potriveste tipului de erorare este executata, dupa care programul continua cu instructiilile de dupa catch().
C++ Standard include o clasa pentru exceptii care poate fi folosita sau extinsa dupa necesitati. De exemplu:
Cod: |
#include #include using namespace std; class myexception: public exception { virtual const char* what() const { return "A aparut exceptia"; } } myex; int main () { try { throw myex; } catch (exception& e) { cout <<> |
Folosind 'exception& e' in catch() va prinde orice exceptie derivata din clasa exception, inclusiv cea definita de noi, 'myexception'.
Librariile C++ standard definesc citeva exceptii standard toate derivate din clasa 'exception' printre care bad_alloc, bad_cast, bad_exception, bad_typeid, etc.
Exista mult alte lucruri legate de exceptii, incepind cu exceptii standard ce le puteti trata pentru diverse situatii, pina la exceptii MFC (macrourile TRY .. CATCH) si multe altele.