Wyjątki C++


Wyjątki C++

Podczas wykonywania kodu C++ mogą wystąpić różne błędy: błędy w kodowaniu popełnione przez programistę, błędy z powodu błędnych danych wejściowych lub inne nieprzewidywalne rzeczy.

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


C++ spróbuj i złap

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

Instrukcja tryumożliwia zdefiniowanie bloku kodu, który ma być testowany pod kątem błędów podczas jego wykonywania.

Słowo throwkluczowe generuje wyjątek po wykryciu problemu, co pozwala nam stworzyć niestandardowy błąd.

Instrukcja catchumożliwia zdefiniowanie bloku kodu, który ma zostać wykonany, jeśli wystąpi błąd w bloku try.

Słowa kluczowe i występują tryw catchparach:

Przykład

try {
  // Block of code to try
  throw exception; // Throw an exception when a problem arise
}
catch () {
  // Block of code to handle errors
}

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

Przykład

try {
  int age = 15;
  if (age >= 18) {
    cout << "Access granted - you are old enough.";
  } else {
    throw (age);
  }
}
catch (int myNum) {
  cout << "Access denied - You must be at least 18 years old.\n";
  cout << "Age is: " << myNum;
}

Przykład wyjaśniony

Używamy trybloku do testowania kodu: jeśli agezmienna jest mniejsza niż 18, zrobimy throwwyjątek i obsłużymy go w naszym catchbloku.

W catchbloku wyłapujemy błąd i coś z nim robimy. Instrukcja catch przyjmuje parametr : w naszym przykładzie używamy intzmiennej ( myNum) (ponieważ wyrzucamy wyjątek inttypu w trybloku ( age)), aby wyprowadzić wartość age.

Jeśli nie wystąpi żaden błąd (np. jeśli agejest 20zamiast 15, co oznacza, że ​​będzie większy niż 18), catchblok jest pomijany:

Przykład

int age = 20;

Możesz również użyć throwsłowa kluczowego, aby wyprowadzić numer referencyjny, taki jak niestandardowy numer/kod błędu do celów organizacyjnych:

Przykład

try {
  int age = 15;
  if (age >= 18) {
    cout << "Access granted - you are old enough.";
  } else {
    throw 505;
  }
}
catch (int myNum) {
  cout << "Access denied - You must be at least 18 years old.\n";
  cout << "Error number: " << myNum;
}

Obsługuj każdy rodzaj wyjątków (...)

Jeśli nie znasz throw typu użytego w trybloku, możesz użyć składni „trzech kropek” ( ...) wewnątrz catchbloku, która obsłuży każdy typ wyjątku:

Przykład

try {
  int age = 15;
  if (age >= 18) {
    cout << "Access granted - you are old enough.";
  } else {
    throw 505;
  }
}
catch (...) {
  cout << "Access denied - You must be at least 18 years old.\n";
}