Ключевое слово 'throw'
Часть раздела Логика и управление потоком путешествия по C++ на Coddy. Урок 50 из 56.
Иногда нужно сообщить, что в вашем собственном коде произошла ошибка, а не просто перехватить исключения, выброшенные другими функциями. Ключевое слово throw позволяет вручную вызвать исключение, когда ваша программа обнаруживает проблему.
Ты можешь выбрасывать разные типы значений как exceptions — целые числа, строки или даже пользовательские объекты. Вот базовый синтаксис:
if (someErrorCondition) {
throw "Error message"; // Выбрасывает строковый литерал
}Когда вы используете throw, программа немедленно прекращает выполнение текущей function и ищет блок catch, который может обработать выброшенное значение. Это особенно полезно для проверки input или условий, которые не должны возникать при нормальном выполнении программы.
Вот практический пример выбрасывания исключения при обнаружении недопустимого ввода:
void checkAge(int age) {
if (age < 0) {
throw "Age cannot be negative!";
}
std::cout << "Age is valid: " << age << std::endl;
}Ключевое слово throw позволяет контролировать, когда и как сообщается об ошибках в ваших программах, делая ваши функции более надёжными и предсказуемыми при работе с недопустимыми условиями.
Задание
ЛегкоСоздайте программу, которая реализует проверку входных данных с использованием ключевого слова throw для ручного вызова исключений при обнаружении недопустимых условий. Это задание проверит ваше понимание того, как использовать throw для сигнализации об ошибках в собственных function.
Будут предоставлены следующие входные данные:
- string
username, представляющая выбранное пользователем имя (эта строка может быть пустой) - целое число
age, представляющее возраст пользователя
Ваша программа должна:
- Создать function с именем
validateUser, которая принимает string и целое число в качестве параметров - Внутри function проверить, пусто ли имя пользователя (имеет длину 0)
- Если имя пользователя пустое, использовать
throwсо string"Username cannot be empty" - Проверить, меньше ли возраст 13
- Если возраст меньше 13, использовать
throwсо string"Age must be at least 13" - Если обе проверки пройдены, вывести
"User validation successful" - В main function вызвать
validateUserс входными значениями - Использовать блок
tryдля вызова function и блокcatchдля обработки любых выброшенных исключений типа string
Используйте следующий точный формат вывода:
При успешной проверке:
User validation successfulПри ошибках проверки:
Validation error: [error_message]Помните, что при использовании throw программа немедленно прекращает выполнение текущей function и ищет подходящий блок catch. Блок catch должен указывать тип const char* для обработки выброшенных строковых литералов. Если первая проверка завершается неудачно, function выбросит исключение и не продолжит проверять второе условие.
Попробуйте сами
#include <iostream>
#include <string>
using namespace std;
int main() {
// Прочитать ввод
string username;
int age;
getline(cin, username);
cin >> age;
// TODO: Напишите свой код здесь
// Создайте функцию validateUser и реализуйте логику проверки
// Используйте блоки try-catch для обработки исключений
return 0;
}В этом уроке есть небольшой тест. Начните урок, чтобы ответить на вопросы и сохранить прогресс.
Все уроки раздела Логика и управление потоком
1Указатели и память
Что такое указатель?Оператор взятия адресаОператор разыменованияНулевые указателиУказатели и массивыДинамическая память и 'new'Освобождение памяти и 'delete'Итоги: Практика с указателями2Векторы (динамические массивы)
Знакомство с std::vectorСоздание вектораДобавление элементовДоступ к элементамРазмер вектораИтерация с помощью цикла ForRange-based цикл ForУдаление элементовИтоги: операции с векторами5Проект: Инструмент инвентаризации
Настройка проектаДобавление и обновление товаров8Основы обработки ошибок
Введение в исключенияБлоки 'try' и 'catch'Ключевое слово 'throw'Различные типы исключенийУниверсальный обработчикИтоги: Безопасное делениеПотренируйтесь самостоятельно: Онлайн-компилятор C++