Partea8 - 8 Tratarea excepiilor Tratarea excepiilor permite...

Info iconThis preview shows pages 1–3. Sign up to view the full content.

View Full Document Right Arrow Icon
8 Tratarea excepţiilor Tratarea excepţiilor permite rezolvarea în mod unitar a erorilor de execuţie. Mecanismul de tratare a excepţiilor din C++ oferă posibilitatea ca o problemă care apare într-o funcţie şi aceasta nu o poate rezolva, să fie definită ca o excepţie, cu speranţa că funcţia apelantă va trata această problemă. O funcţie care doreşte să trateze astfel de probleme va indica acest lucru prin captarea excepţiei respective, iar codul care se execută la captare se numeşte rutină de tratare a excepţiei ( exception handler ). Ca exemplu, se consideră modul în care poate fi tratată o depăşire de dimensiune în clasa Vector . class Vector{ int* p; int sz; public: class Range {}; // exceptie la depasire dimens. int& operator[](int i); // . ... }; if (0 <= i & i throw Range(); return p[0]; // numai pt. evitare erori comp. } try { fv(v); // apelul unei funcţii } catch(Vector::Range){ // Rutina de tratare a exceptiei // Vector::Range // In acest punct se ajunge numai dacă // in functia fv(v) s-a apelat operatorul [] // cu un indice în afara domeniului } } 1
Background image of page 1

Info iconThis preview has intentionally blurred sections. Sign up to view the full version.

View Full DocumentRight Arrow Icon
Construcţia: catch ( /* …..…… */){ // ……. } este numită rutină de tratare a excepţiei ( exception handler ). Ea este apelată imediat după un bloc prefixat de cuvântul cheie try sau după o altă rutină de tratare a unei excepţii. Paranteza care urmează cuvântului cheie catch conţine o declaraţie care este folosită ca un argument: această declaraţie specifică tipul excepţiei de care se ocupă rutina de tratare a erorii şi, uneori, numele argumentului. Dacă o excepţie (ceea ce însemnă o eroare) apare într-un bloc prefixat de specificatorul try , ea este lansată de către instrucţiunea throw , după care este captată într-o rutină de tratare a excepţiilor (deci în blocul instrucţiunii catch ) şi prelucrată. Blocul try trebuie să conţină acea secţiune a programului în care se doreşte să fie căutate erorile. El poate cuprinde câteva instrucţiuni într-o funcţie sau chiar întregul corp al funcţiei main() , ceea ce înseamnă urmărirea erorilor în întregul program. Atunci când o funcţie generează o excepţie, ea nu îşi mai continuă execuţia ca în situaţia în care ar apela o funcţie de tratare a erorii, din care se revine printr-o instrucţiune return , ci execuţia este captată în rutina de tratare, după care se continuă programul cu instrucţiunile care urmează rutinei de tratare a excepţiei. 8.1Discriminarea excepţiilor În mod obişnuit, într-un program pot apare mai multe tipuri de erori de execuţie ( run-time errors ) şi fiecare tip de eroare poate fi asociat unei excepţii cu un nume distinct. Captarea excepţiilor este executată de mai multe blocuri catch , care pot fi asociate unuia sau mai multor blocuri try . Forma generală pentru un bloc try urmat de mai multe blocuri catch care tratează diferite tipuri de excepţii este
Background image of page 2
Image of page 3
This is the end of the preview. Sign up to access the rest of the document.

This note was uploaded on 08/10/2009 for the course CS UCJ01001 taught by Professor Ionstoica during the Spring '09 term at 東京大学.

Page1 / 12

Partea8 - 8 Tratarea excepiilor Tratarea excepiilor permite...

This preview shows document pages 1 - 3. Sign up to view the full document.

View Full Document Right Arrow Icon
Ask a homework question - tutors are online