A Palavra-chave 'throw'
Parte da seção Lógica & Fluxo do Journey de C++ da Coddy — lição 50 de 56.
Às vezes, você precisa sinalizar que um erro ocorreu em seu próprio código, em vez de apenas capturar exceções lançadas por outras funções. A palavra-chave throw permite que você dispare manualmente uma exceção quando seu programa detecta um problema.
Você pode lançar diferentes tipos de valores como exceções - inteiros, strings ou até mesmo objetos personalizados. Aqui está a sintaxe básica:
if (someErrorCondition) {
throw "Error message"; // Lança uma string literal
}Quando você usa throw, o programa interrompe imediatamente a execução da função atual e procura por um bloco catch que possa lidar com o valor lançado. Isso é particularmente útil para validar entradas ou verificar condições que não deveriam ocorrer durante a execução normal do programa.
Aqui está um exemplo prático de como lançar uma exceção ao detectar uma entrada inválida:
void checkAge(int age) {
if (age < 0) {
throw "Age cannot be negative!";
}
std::cout << "Age is valid: " << age << std::endl;
}A palavra-chave throw oferece controle sobre quando e como os erros são relatados em seus programas, tornando suas funções mais robustas e previsíveis ao lidar com condições inválidas.
Desafio
FácilCrie um programa que implemente a validação de entrada usando a palavra-chave throw para disparar exceções manualmente quando condições inválidas forem detectadas. Este desafio testará sua compreensão de como usar throw para sinalizar erros em suas próprias funções.
As seguintes entradas serão fornecidas:
- Uma string
usernamerepresentando o nome de usuário escolhido por um usuário - Um número inteiro
agerepresentando a idade do usuário
Seu programa deve:
- Criar uma função chamada
validateUserque recebe uma string e um inteiro como parâmetros - Dentro da função, verificar se o nome de usuário está vazio (tem comprimento 0)
- Se o nome de usuário estiver vazio, use
throwcom a string"Username cannot be empty" - Verificar se a idade é menor que 13
- Se a idade for menor que 13, use
throwcom a string"Age must be at least 13" - Se ambas as validações passarem, imprima
"User validation successful" - Na função principal, chame
validateUsercom os valores de entrada - Use um bloco
trypara chamar a função e um blococatchpara tratar quaisquer exceções de string lançadas
Use o seguinte formato de saída exato:
Para validação bem-sucedida:
User validation successfulPara erros de validação:
Validation error: [error_message]Lembre-se de que, ao usar throw, o programa interrompe imediatamente a execução da função atual e procura por um bloco catch correspondente. O bloco catch deve especificar o tipo const char* para lidar com os literais de string lançados. Se a primeira validação falhar, a função lançará uma exceção e não continuará a verificar a segunda condição.
Folha de consulta
A palavra-chave throw permite que você dispare exceções manualmente quando seu programa detecta um problema:
if (someErrorCondition) {
throw "Error message"; // Lança uma string literal
}Quando você usa throw, o programa para imediatamente de executar a função atual e procura por um bloco catch que possa lidar com o valor lançado.
Exemplo de lançamento de uma exceção para validação de entrada:
void checkAge(int age) {
if (age < 0) {
throw "Age cannot be negative!";
}
std::cout << "Age is valid: " << age << std::endl;
}Você pode lançar diferentes tipos de valores como exceções - inteiros, strings ou objetos personalizados. Use const char* em blocos catch para lidar com strings literais lançadas.
Experimente você mesmo
#include <iostream>
#include <string>
using namespace std;
int main() {
// Ler entrada
string username;
int age;
cin >> username;
cin >> age;
// TODO: Escreva seu código aqui
// Crie a função validateUser e implemente a lógica de validação
// Use blocos try-catch para lidar com exceções
return 0;
}Esta lição inclui um quiz rápido. Comece a lição para respondê-lo e acompanhar seu progresso.
Todas as lições de Lógica & Fluxo
1Ponteiros e Memória
O que é um Ponteiro?Operador de EndereçoOperador de DesreferenciaçãoPonteiros NulosPonteiros e ArraysMemória Dinâmica com 'new'Liberando Memória com 'delete'Recapitulação - Prática com Ponteiros2Vetores (Arrays Dinâmicos)
Introdução ao std::vectorCriando um VetorAdicionando ElementosAcessando ElementosTamanho do VetorIterando com um Loop ForLoop For Baseado em IntervaloRemovendo ElementosRecapitulação - Operações com Vetores5Projeto: Ferramenta de Inventário
Configuração do ProjetoAdicionando e Atualizando Itens8Tratamento Básico de Erros
Introdução a ExceçõesOs Blocos 'try' e 'catch'A Palavra-chave 'throw'Diferentes Tipos de ExceçãoO Manipulador Catch-AllRecapitulação - Divisão Segura3Projeto: Ferramenta de Lista de Tarefas
Visão Geral do ProjetoAdicionando uma Tarefa