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