Diferență între revizuiri ale paginii „C++ POO Lab Lucrarea 5”
Linia 51: | Linia 51: | ||
Picat | Picat | ||
Err: 101 | Err: 101 | ||
+ | |||
+ | </syntaxhighlight> | ||
+ | |||
+ | = '''<stdexcept>''' = | ||
+ | |||
+ | Aceasta biblioteca conține un set de excepții standard pe care programul le poate folosi pentru a raporta erori. | ||
+ | |||
+ | ===Exemplu=== | ||
+ | |||
+ | În acest exemplu, funcția medieBac() este apelată în interiorul blocului try din main. Funcția medieBac() așteaptă sa primească ca argument 3 numere întregi și aruncă o excepție invalid_argument dacă oricare dintre ele este negativ. | ||
+ | |||
+ | Clasa std::invalid_argument este definită în biblioteca <stdexcept>. Această clasă definește tipurile de obiecte care trebuie aruncate ca excepții și raportează erori care apar deoarece o valoare a argumentului nu a fost acceptată. | ||
+ | |||
+ | Blocul '''catch''' din funcția main prinde excepția invalid_argument și o tratează. | ||
+ | |||
+ | <syntaxhighlight lang="C++"> | ||
+ | #include <iostream> | ||
+ | #include <stdexcept> | ||
+ | using namespace std; | ||
+ | |||
+ | double medieBac(int romana, int mate, int info) | ||
+ | { | ||
+ | if (mate < 0 || romana < 0 || info < 0) | ||
+ | throw invalid_argument("Notele de la bacalaureat trebuie sa fie numere pozitive"); | ||
+ | return (mate + info + romana) / 2.; | ||
+ | } | ||
+ | int main() | ||
+ | { | ||
+ | try | ||
+ | { | ||
+ | cout << medieBac(-1, 8, 10); | ||
+ | } | ||
+ | catch (invalid_argument& err) | ||
+ | { | ||
+ | cout << err.what() << endl; | ||
+ | } | ||
+ | return 0; | ||
+ | } | ||
+ | </syntaxhighlight> | ||
+ | |||
+ | |||
+ | |||
+ | <syntaxhighlight lang="C++"> | ||
</syntaxhighlight> | </syntaxhighlight> |
Versiunea de la data 2 aprilie 2022 20:01
Introducere
Această lucrare are ca scop familiarizarea cu excepțiile.
La compilarea codului pot apărea diferite erori făcute de programator, erori datorate introducerii greșite sau alte lucruri neprevăzute.
Când apare o eroare, execuția se va opri și va genera un mesaj de eroare. Acest lucru se numește aruncarea unei o excepții.
Try, throw and catch
Gestionarea excepțiilor în C++ se face folosind cele trei cuvinte cheie: try, throw și catch .
Pentru a se prinde excepțiile, codul respectiv se include într-un bloc try, unde putem testa dacă exista erori în timp ce executam codul.
Dacă nu exista erori în secțiunea respectiva, execuția programului continuă normal.
O excepție este aruncată utilizând cuvântului throw din interiorul blocului try.
Cuvântul cheie throw ne permite sa definim excepții personalizate.
Manipularea de excepții se face prin cuvântul catch, care ne permite sa definim un bloc de cod care sa fie executat în cazul în care apare o eroare în blocul try .
Exemplu
#include <iostream>
using namespace std;
int main(){
try {
int nota_mate = 4;
if (nota_mate >= 5) {
cout << "Promovat";
} else {
//aruncam eroarea
throw 101;
}
}
catch (int err) {
//tratam eroarea
cout << "Picat\n";
cout << "Err: " << err;
}
}
Output:
Picat
Err: 101
<stdexcept>
Aceasta biblioteca conține un set de excepții standard pe care programul le poate folosi pentru a raporta erori.
Exemplu
În acest exemplu, funcția medieBac() este apelată în interiorul blocului try din main. Funcția medieBac() așteaptă sa primească ca argument 3 numere întregi și aruncă o excepție invalid_argument dacă oricare dintre ele este negativ.
Clasa std::invalid_argument este definită în biblioteca <stdexcept>. Această clasă definește tipurile de obiecte care trebuie aruncate ca excepții și raportează erori care apar deoarece o valoare a argumentului nu a fost acceptată.
Blocul catch din funcția main prinde excepția invalid_argument și o tratează.
#include <iostream>
#include <stdexcept>
using namespace std;
double medieBac(int romana, int mate, int info)
{
if (mate < 0 || romana < 0 || info < 0)
throw invalid_argument("Notele de la bacalaureat trebuie sa fie numere pozitive");
return (mate + info + romana) / 2.;
}
int main()
{
try
{
cout << medieBac(-1, 8, 10);
}
catch (invalid_argument& err)
{
cout << err.what() << endl;
}
return 0;
}