Wyjątki

Wyjątki w C++

Podczas wykonywania kodu C++ mogą wystąpić różne błędy: błędy kodowania popełnione przez programistę, błędy spowodowane błędnymi danymi wejściowymi lub inne nieprzewidziane rzeczy.

Gdy wystąpi błąd, C++ zwykle zatrzymuje się i generuje komunikat o błędzie. Termin techniczny to: C ++ zgłosi wyjątek (zgłosi błąd).

try i catch

Obsługa wyjątków w C++ składa się z trzech słów kluczowych: try, throw i catch:

try pozwala zdefiniować blok kodu który zostanie sprawdzony pod kątem błędów, podczas gdy jest on wykonywany.

throw zgłasza wyjątek, gdy zostanie wykryty problem, który pozwala nam stworzyć obsługę niestandardowego błędu.

catch pozwala zdefiniować blok kodu do wykonania, w przypadku wystąpienia błędu w bloku try.

słowa kluczowe try i catch występują w parach:

Przykład 1.

try {
  // Blok kodu do testowania 
  throw wyjątek; // Zgłosi wyjątek, gdy pojawi się problem   
}
catch () {
  // Blok kodu do obsługi błędów 
}

Rozważmy następujący przykład:

Przykład 2. int wiek = 15;

try {
  int wiek = 15;
  if (wiek >= 18) {
    cout << "Przyznano dostęp - jesteś wystarczająco dorosły.";
  } else {
    throw (wiek);
  }
}
catch (int N) {
  cout << "Odmowa dostępu - Musisz mieć co najmniej 18 lat.\n";
  cout << "Wiek to: " << N;
}

Przetestuj

Wyjaśnienie przykładu

Używamy bloku try do testowania kodu: Jeśli zmienna wiek jest mniejsza niż 18, zrobimy wyjątek throw i obsłużymy go w bloku catch.

W bloku catch wychwytujemy błąd i coś z tym robimy. catch bierze parametr : w naszym przykładzie używamy zmiennej int (N) (bo rzucają wyjątek typu int w bloku  try ( wiek)), na wyjściu wartość wiek.

Jeśli nie wystąpi błąd (np. Jeśli wiek jest 20 zamiast 15, co oznacza, że ​​będzie większy niż 18), blok catch jest pomijany.

Przykład interaktywny 3. int wiek = 20;


Możesz również użyć słowa kluczowego throw, aby wyświetlić numer referencyjny, na przykład niestandardowy numer/kod błędu do celów informacyjnych:

Przykład 4.

try {
  int wiek = 15;
  if (wiek >= 18) {
    cout << "Przyznano dostęp - jesteś wystarczająco dorosły.";
  } else {
    throw 505;
  }
}
catch (int N) {
  cout << "Odmowa dostępu - Musisz mieć co najmniej 18 lat.\n";
  cout << "Error number: " << N;
}

Przetestuj

Obsługuj wszystkie typy wyjątków

Jeśli nie znasz typu użytego w bloku try, możesz użyć zapisu "trzech kropek" (...) wewnątrz bloku catch, która będzie obsługiwać każdy typ wyjątku:

Przykład 5. 

try {
  int wiek = 15;
  if (wiek >= 18) {
    cout << "Przyznano dostęp - jesteś wystarczająco dorosły.";
  } else {
    throw 505;
  }
}
catch (...) {
  cout << "Odmowa dostępu - Musisz mieć co najmniej 18 lat.\n";
}
Przetestuj