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 : try
i throw
:catch
Instrukcja try
umożliwia zdefiniowanie bloku kodu, który ma być testowany pod kątem błędów podczas jego wykonywania.
Słowo throw
kluczowe generuje wyjątek po wykryciu problemu, co pozwala nam stworzyć niestandardowy błąd.
Instrukcja catch
umożliwia zdefiniowanie bloku kodu, który ma zostać wykonany, jeśli wystąpi błąd w bloku try.
Słowa kluczowe i występują try
w catch
parach:
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 try
bloku do testowania kodu: jeśli age
zmienna jest mniejsza niż 18
, zrobimy throw
wyjątek i obsłużymy go w naszym catch
bloku.
W catch
bloku wyłapujemy błąd i coś z nim robimy. Instrukcja catch
przyjmuje parametr : w naszym przykładzie używamy int
zmiennej ( myNum
) (ponieważ wyrzucamy wyjątek int
typu w try
bloku ( age
)), aby wyprowadzić wartość age
.
Jeśli nie wystąpi żaden błąd (np. jeśli age
jest 20
zamiast 15
, co oznacza, że będzie większy niż 18), catch
blok jest pomijany:
Przykład
int age = 20;
Możesz również użyć throw
sł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 try
bloku, możesz użyć składni „trzech kropek” ( ...
) wewnątrz catch
bloku, 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";
}