 |
|
 |
 | Exceptii C++ |  |
Trimis: 19/07/2007 16:37 |
|
|
| Ad_Infinitum |
| Administrator |

 |
 |
| Data inscrierii: 23/Iun/2007 |
| Mesaje: 212 |
|
|
|
 |
 |
 |
|
Un fapt foarte util la programarea C++ sint exceptiile. Astea sint erori articole la executia programului cind controlul este preluat de codul de tratarea acestor exceptii, daca exista. In acest fel se poate preveni opriri bruste ale programelor la aparitia acestor erori, putindu-se lua masuri de genul eliberat resursele afisate, atentionat utilizatorul, scris detalii despre eroare in fisiere de log, etc.
Pentru a trata erorile se folosesc blocurile try .. catch, ca in exemplul de mai jos:
| Citat: |
#include <iostream>
using namespace std;
int main () {
try
{
throw 20;
}
catch (int e)
{
cout << "Exceptie aparuta cu nr. " << e << endl;
}
return 0;
}
|
Sa luam pas cu pas exemplul. Tot codul de executat in care este posibil sa apara exceptiile e adăugat 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 modele de erori. In acest caz este prinsa doar eroarea de tip intreg.
De exemplu puteti avea asa:
| Citat: |
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:
| Citat: |
#include <iostream>
#include <exception>
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 << e.what() << endl;
}
return 0;
}
|
Folosind 'exception& e' in catch() va ține absolut 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 diferite situatii, pina la exceptii MFC (macrourile TRY .. CATCH) si numeroase altele. |
|
|
|
|
|
|
Fa-ti si tu propriul forum GRATUIT, pe www.myforum.ro
|
|