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 ocorreu um erro no 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ê acione 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. Esta é a sintaxe básica:
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 um bloco catch que possa tratar 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;
}O chamador envolve a chamada em um bloco try. Uma string literal lançada tem o tipo const char*, então esse é o tipo especificado pelo bloco catch, e seu parâmetro contém a mensagem:
try {
checkAge(-5);
} catch (const char* message) {
std::cout << "Error: " << message << std::endl;
}
// Saída: Error: Age cannot be negative!A palavra-chave throw dá a você controle sobre quando e como os erros são reportados nos 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 cadeia de caracteres
usernameque representa o nome de usuário escolhido por uma pessoa (esta linha pode estar vazia) - Um número inteiro
ageque representa a idade da pessoa
Seu programa deve:
- Criar uma função chamada
validateUserque recebe uma cadeia de caracteres e um número 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, usar
throwpara lançar a cadeia de caracteres"Username cannot be empty" - Verificar se a idade é menor que 13
- Se a idade for menor que 13, usar
throwpara lançar a cadeia de caracteres"Age must be at least 13" - Se ambas as validações forem aprovadas, imprimir
"User validation successful" - Na função principal, chamar
validateUsercom os valores de entrada - Usar um bloco
trypara chamar a função e um blococatchpara tratar quaisquer exceções de cadeia de caracteres lançadas
Use o seguinte formato de saída exato:
Para uma validação bem-sucedida:
User validation successfulPara erros de validação:
Validation error: [error_message]Lembre-se de que, quando você usa throw, o programa para imediatamente de executar a função atual e procura um bloco catch correspondente. O bloco catch deve especificar o tipo const char* para tratar os literais de cadeia de caracteres lançados. Se a primeira validação falhar, a função lançará uma exceção e não continuará verificando a segunda condição.
Experimente você mesmo
#include <iostream>
#include <string>
using namespace std;
// TODO: Escreva a função validateUser aqui, acima de main
// Ela recebe um string username e um int age e lança um literal de string quando uma verificação falha
int main() {
// Leia a entrada
string username;
int age;
getline(cin, username);
cin >> age;
// TODO: Chame validateUser dentro de um bloco try
// e capture a mensagem lançada com catch (const char* error)
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 TarefaPratique por conta própria: Compilador de C++ online