Słowo kluczowe „throw”
Część sekcji Logika i przepływ programu ścieżki C++ w Coddy. Lekcja 50 z 56.
Czasami trzeba zasygnalizować, że w Twoim własnym kodzie wystąpił błąd, zamiast tylko przechwytywać wyjątki zgłaszane przez inne funkcje. Słowo kluczowe throw pozwala ręcznie zgłosić wyjątek, gdy program wykryje problem.
Możesz zgłaszać jako wyjątki różne typy wartości — liczby całkowite, ciągi znaków, a nawet własne obiekty. Oto podstawowa składnia:
if (someErrorCondition) {
throw "Error message"; // Rzuca literał łańcuchowy
}Gdy używasz throw, program natychmiast przestaje wykonywać bieżącą funkcję i szuka bloku catch, który może obsłużyć rzuconą wartość. Jest to szczególnie przydatne do walidowania danych wejściowych lub sprawdzania warunków, które nie powinny występować podczas normalnego wykonywania programu.
Oto praktyczny przykład zgłaszania wyjątku po wykryciu nieprawidłowych danych wejściowych:
void checkAge(int age) {
if (age < 0) {
throw "Age cannot be negative!";
}
std::cout << "Age is valid: " << age << std::endl;
}Słowo kluczowe throw daje ci kontrolę nad tym, kiedy i w jaki sposób błędy są zgłaszane w twoich programach, dzięki czemu twoje funkcje są bardziej odporne i przewidywalne podczas obsługi nieprawidłowych warunków.
Wyzwanie
ŁatwyUtwórz program, który implementuje walidację danych wejściowych za pomocą słowa kluczowego throw, aby ręcznie zgłaszać wyjątki po wykryciu nieprawidłowych warunków. To wyzwanie sprawdzi, czy rozumiesz, jak używać throw do sygnalizowania błędów we własnych funkcjach.
Podane zostaną następujące dane wejściowe:
- Ciąg znaków
usernamereprezentujący wybraną przez użytkownika nazwę (ten wiersz może być pusty) - Liczba całkowita
agereprezentująca wiek użytkownika
Twój program powinien:
- Utworzyć funkcję o nazwie
validateUser, która przyjmuje jako parametry ciąg znaków i liczbę całkowitą - Wewnątrz funkcji sprawdzić, czy nazwa użytkownika jest pusta (ma długość 0)
- Jeśli nazwa użytkownika jest pusta, użyć
throw, aby zgłosić ciąg znaków"Username cannot be empty" - Sprawdzić, czy wiek jest mniejszy niż 13
- Jeśli wiek jest mniejszy niż 13, użyć
throw, aby zgłosić ciąg znaków"Age must be at least 13" - Jeśli obie walidacje zakończą się powodzeniem, wypisać
"User validation successful" - W funkcji głównej wywołać
validateUserz wartościami wejściowymi - Użyć bloku
trydo wywołania funkcji i blokucatchdo obsługi wszelkich zgłoszonych wyjątków typu ciąg znaków
Użyj następującego dokładnego formatu wyjściowego:
W przypadku pomyślnej walidacji:
User validation successfulW przypadku błędów walidacji:
Validation error: [error_message]Pamiętaj, że gdy używasz throw, program natychmiast przestaje wykonywać bieżącą funkcję i szuka pasującego bloku catch. Blok catch powinien określać typ const char*, aby obsługiwać zgłoszone literały ciągów znaków. Jeśli pierwsza walidacja się nie powiedzie, funkcja zgłosi wyjątek i nie będzie kontynuować sprawdzania drugiego warunku.
Spróbuj swoich sił
#include <iostream>
#include <string>
using namespace std;
int main() {
// Wczytaj dane wejściowe
string username;
int age;
getline(cin, username);
cin >> age;
// TODO: Napisz tutaj swój kod
// Utwórz funkcję validateUser i zaimplementuj logikę walidacji
// Użyj bloków try-catch do obsługi wyjątków
return 0;
}Ta lekcja zawiera krótki quiz. Zacznij lekcję, żeby na niego odpowiedzieć i śledzić swoje postępy.
Wszystkie lekcje w sekcji Logika i przepływ programu
1Wskaźniki i pamięć
Czym jest wskaźnik?Operator pobrania adresuOperator dereferencjiWskaźniki zeroweWskaźniki i tabliceDynamiczne zarządzanie pamięcią za pomocą „new”Zwalnianie pamięci za pomocą „delete”Podsumowanie — ćwiczenia ze wskaźnikami2Wektory (tablice dynamiczne)
Wprowadzenie do std::vectorTworzenie wektoraDodawanie elementówDostęp do elementówRozmiar wektoraIterowanie za pomocą pętli forPętla for oparta na zakresieUsuwanie elementówPodsumowanie — operacje na wektorach5Projekt: Narzędzie do zarządzania zapasami
Konfiguracja projektuDodawanie i aktualizowanie produktów8Podstawy obsługi błędów
Wprowadzenie do wyjątkówBloki „try” i „catch”Słowo kluczowe „throw”Różne typy wyjątkówObsługa wszystkich wyjątkówPodsumowanie — bezpieczne dzielenie3Projekt: narzędzie do listy zadań
Przegląd projektuDodawanie zadaniaPoćwicz samodzielnie: Kompilator C++ online