Le mot-clé 'throw'
Fait partie de la section Logique et Flux du Journey C++ de Coddy — leçon 50 sur 56.
Parfois, vous devez signaler qu'une erreur s'est produite dans votre propre code, plutôt que de simplement intercepter les exceptions levées par d'autres fonctions. Le mot-clé throw vous permet de déclencher manuellement une exception lorsque votre programme détecte un problème.
Vous pouvez lever différents types de valeurs en tant qu'exceptions - des entiers, des chaînes de caractères ou même des objets personnalisés. Voici la syntaxe de base :
if (someErrorCondition) {
throw "Error message"; // Lève une chaîne littérale
}Lorsque vous utilisez throw, le programme arrête immédiatement l'exécution de la fonction actuelle et recherche un bloc catch capable de gérer la valeur levée. Ceci est particulièrement utile pour valider les entrées ou vérifier des conditions qui ne devraient pas se produire lors de l'exécution normale du programme.
Voici un exemple pratique de lancement d'une exception lors de la détection d'une saisie invalide :
void checkAge(int age) {
if (age < 0) {
throw "Age cannot be negative!";
}
std::cout << "Age is valid: " << age << std::endl;
}Le mot-clé throw vous donne le contrôle sur le moment et la manière dont les erreurs sont signalées dans vos programmes, rendant vos fonctions plus robustes et prévisibles lors de la gestion de conditions invalides.
Défi
FacileCréez un programme qui implémente la validation des entrées en utilisant le mot-clé throw pour déclencher manuellement des exceptions lorsque des conditions invalides sont détectées. Ce défi testera votre compréhension de l'utilisation de throw pour signaler des erreurs dans vos propres fonctions.
Les entrées suivantes seront fournies :
- Une chaîne de caractères
usernamereprésentant le nom d'utilisateur choisi par un utilisateur - Un entier
agereprésentant l'âge de l'utilisateur
Votre programme doit :
- Créer une fonction nommée
validateUserqui prend une chaîne de caractères et un entier en paramètres - À l'intérieur de la fonction, vérifier si le nom d'utilisateur est vide (a une longueur de 0)
- Si le nom d'utilisateur est vide, utiliser
throwavec la chaîne"Username cannot be empty" - Vérifier si l'âge est inférieur à 13
- Si l'âge est inférieur à 13, utiliser
throwavec la chaîne"Age must be at least 13" - Si les deux validations réussissent, afficher
"User validation successful" - Dans la fonction principale, appeler
validateUseravec les valeurs d'entrée - Utiliser un bloc
trypour appeler la fonction et un bloccatchpour gérer toutes les exceptions de type chaîne de caractères lancées
Utilisez le format de sortie exact suivant :
Pour une validation réussie :
User validation successfulPour les erreurs de validation :
Validation error: [error_message]N'oubliez pas que lorsque vous utilisez throw, le programme arrête immédiatement l'exécution de la fonction actuelle et recherche un bloc catch correspondant. Le bloc catch doit spécifier le type const char* pour gérer les littéraux de chaîne lancés. Si la première validation échoue, la fonction lancera une exception et ne continuera pas à vérifier la deuxième condition.
Aide-mémoire
Le mot-clé throw vous permet de déclencher manuellement des exceptions lorsque votre programme détecte un problème :
if (someErrorCondition) {
throw "Error message"; // Lance une chaîne littérale
}Lorsque vous utilisez throw, le programme arrête immédiatement l'exécution de la fonction actuelle et recherche un bloc catch capable de gérer la valeur lancée.
Exemple de lancement d'une exception pour la validation d'une saisie :
void checkAge(int age) {
if (age < 0) {
throw "Age cannot be negative!";
}
std::cout << "Age is valid: " << age << std::endl;
}Vous pouvez lancer différents types de valeurs en tant qu'exceptions - des entiers, des chaînes de caractères ou des objets personnalisés. Utilisez const char* dans les blocs catch pour gérer les chaînes littérales lancées.
Essayez vous-même
#include <iostream>
#include <string>
using namespace std;
int main() {
// Lire l'entrée
string username;
int age;
cin >> username;
cin >> age;
// À FAIRE : Écrivez votre code ici
// Créer la fonction validateUser et implémenter la logique de validation
// Utiliser des blocs try-catch pour gérer les exceptions
return 0;
}Cette leçon comprend un petit quiz. Commencez la leçon pour y répondre et suivre votre progression.
Toutes les leçons de Logique et Flux
1Pointeurs et mémoire
Qu'est-ce qu'un pointeur ?Opérateur d'adresseOpérateur de déréférencementPointeurs nulsPointeurs et tableauxMémoire dynamique avec 'new'Libérer la mémoire avec 'delete'Récapitulatif - Pratique des pointeurs2Vecteurs (Tableaux dynamiques)
Introduction à std::vectorCréer un vecteurAjouter des élémentsAccéder aux élémentsTaille d'un vecteurItérer avec une boucle ForBoucle For basée sur l'intervalleSupprimer des élémentsRécapitulatif - Opérations sur les vecteurs5Projet : Outil d'inventaire
Configuration du projetAjout et mise à jour d'articles8Gestion de base des erreurs
Introduction aux exceptionsLes blocs 'try' et 'catch'Le mot-clé 'throw'Les différents types d'exceptionsLe gestionnaire d'exceptions génériqueRécapitulatif - Division sécurisée3Projet : Outil de liste de tâches
Présentation du projetAjouter une tâche