Das 'throw'-Schlüsselwort
Teil des Abschnitts Logik & Ablauf der C++-Journey von Coddy — Lektion 50 von 56.
Manchmal müssen Sie signalisieren, dass ein Fehler in Ihrem eigenen Code aufgetreten ist, anstatt nur Ausnahmen abzufangen, die von anderen Funktionen ausgelöst wurden. Das Schlüsselwort throw ermöglicht es Ihnen, manuell eine Ausnahme auszulösen, wenn Ihr Programm ein Problem erkennt.
Sie können verschiedene Arten von Werten als Ausnahmen auslösen - Ganzzahlen, Zeichenfolgen oder sogar benutzerdefinierte Objekte. Hier ist die grundlegende Syntax:
if (someErrorCondition) {
throw "Error message"; // Wirft ein String-Literal
}Wenn Sie throw verwenden, stoppt das Programm sofort die Ausführung der aktuellen Funktion und sucht nach einem catch-Block, der den geworfenen Wert verarbeiten kann. Dies ist besonders nützlich für die Validierung von Eingaben oder zur Überprüfung von Bedingungen, die während der normalen Programmausführung nicht auftreten sollten.
Hier ist ein praktisches Beispiel für das Auslösen einer Exception beim Erkennen einer ungültigen Eingabe:
void checkAge(int age) {
if (age < 0) {
throw "Age cannot be negative!";
}
std::cout << "Age is valid: " << age << std::endl;
}Das throw-Schlüsselwort gibt Ihnen die Kontrolle darüber, wann und wie Fehler in Ihren Programmen gemeldet werden, wodurch Ihre Funktionen robuster und vorhersehbarer werden, wenn sie mit ungültigen Bedingungen umgehen.
Aufgabe
EinfachErstellen Sie ein Programm, das eine Eingabevalidierung implementiert, indem es das Schlüsselwort throw verwendet, um manuell Ausnahmen auszulösen, wenn ungültige Bedingungen erkannt werden. Diese Herausforderung testet Ihr Verständnis dafür, wie Sie throw verwenden, um Fehler in Ihren eigenen Funktionen zu signalisieren.
Die folgenden Eingaben werden bereitgestellt:
- Ein String
username, der den gewählten Benutzernamen eines Benutzers darstellt - Ein Integer
age, der das Alter des Benutzers darstellt
Ihr Programm sollte:
- Eine Funktion namens
validateUsererstellen, die einen String und einen Integer als Parameter entgegennimmt - Innerhalb der Funktion prüfen, ob der Benutzername leer ist (Länge 0 hat)
- Wenn der Benutzername leer ist,
throwden String"Username cannot be empty" - Prüfen, ob das Alter kleiner als 13 ist
- Wenn das Alter kleiner als 13 ist,
throwden String"Age must be at least 13" - Wenn beide Validierungen erfolgreich sind, geben Sie
"User validation successful"aus - In der Hauptfunktion rufen Sie
validateUsermit den Eingabewerten auf - Verwenden Sie einen
try-Block, um die Funktion aufzurufen, und einencatch-Block, um alle geworfenen String-Ausnahmen zu behandeln
Verwenden Sie das folgende exakte Ausgabeformat:
Für eine erfolgreiche Validierung:
User validation successfulFür Validierungsfehler:
Validation error: [error_message]Denken Sie daran, dass das Programm bei Verwendung von throw die Ausführung der aktuellen Funktion sofort stoppt und nach einem passenden catch-Block sucht. Der catch-Block sollte den Typ const char* angeben, um die geworfenen String-Literale zu behandeln. Wenn die erste Validierung fehlschlägt, wirft die Funktion eine Ausnahme und fährt nicht mit der Überprüfung der zweiten Bedingung fort.
Spickzettel
Das Schlüsselwort throw ermöglicht es Ihnen, Ausnahmen manuell auszulösen, wenn Ihr Programm ein Problem erkennt:
if (someErrorCondition) {
throw "Error message"; // Wirft ein String-Literal
}Wenn Sie throw verwenden, stoppt das Programm sofort die Ausführung der aktuellen Funktion und sucht nach einem catch-Block, der den geworfenen Wert verarbeiten kann.
Beispiel für das Auslösen einer Ausnahme zur Eingabevalidierung:
void checkAge(int age) {
if (age < 0) {
throw "Age cannot be negative!";
}
std::cout << "Age is valid: " << age << std::endl;
}Sie können verschiedene Arten von Werten als Ausnahmen werfen – Ganzzahlen, Strings oder benutzerdefinierte Objekte. Verwenden Sie const char* in catch-Blöcken, um geworfene String-Literale zu verarbeiten.
Probier es selbst
#include <iostream>
#include <string>
using namespace std;
int main() {
// Eingabe lesen
string username;
int age;
cin >> username;
cin >> age;
// TODO: Schreiben Sie Ihren Code hier
// Erstellen Sie die Funktion validateUser und implementieren Sie die Validierungslogik
// Verwenden Sie try-catch-Blöcke, um Ausnahmen zu behandeln
return 0;
}Diese Lektion enthält ein kurzes Quiz. Starte die Lektion, um es zu beantworten und deinen Fortschritt zu speichern.
Alle Lektionen in Logik & Ablauf
1Pointer und Speicher
Was ist ein Pointer?AdressoperatorDereferenzierungsoperatorNull-PointerPointer und ArraysDynamischer Speicher mit 'new'Speicher freigeben mit 'delete'Zusammenfassung – Pointer-Übung2Vektoren (Dynamische Arrays)
Einführung in std::vectorEinen Vector erstellenElemente hinzufügenAuf Elemente zugreifenVector-GrößeIterieren mit einer For-SchleifeRange-based For-SchleifeElemente entfernenZusammenfassung – Vector-Operationen5Projekt: Inventar-Tool
Projekt-SetupArtikel hinzufügen und aktualisieren8Grundlagen der Fehlerbehandlung
Einführung in ExceptionsDie 'try'- und 'catch'-BlöckeDas 'throw'-SchlüsselwortVerschiedene Exception-TypenDer Catch-All-HandlerRückblick - Sichere Division3Projekt: Aufgabenlisten-Tool
ProjektübersichtEine Aufgabe hinzufügen