Пример 1. Программа для создания пользовательского класса исключений на C++
Этот простой пример реализован для демонстрации пользовательской обработки и обнаружения исключений в C++.
#include#include <исключение>
с использованием пространство имен стандартный ;
сорт ДемоИсключение : общественный исключение
{
виртуальный константа голец * что ( ) константа бросать ( )
{
возвращаться «Поймано пользовательское исключение» ;
}
} ;
интервал основной ( )
{
ДемоИсключение dEx ;
пытаться
{
бросать dEx ;
}
ловить ( исключение & кроме )
{
расчет << кроме. что ( ) << конец ;
}
возвращаться 0 ;
}
Мы определяем заголовочный файл в коде, включая «iostream» и «исключение». «iostream» специально вызывается для входного и выходного потока, тогда как библиотека «Exception» вызывается для обработки исключения. После этого мы создаем класс «DemoException», производный от класса «исключений» C++. Здесь мы устанавливаем виртуальную функцию What(), которая используется для предоставления константы char*, которая отображает результаты сообщения об ошибке, связанного с исключением.
Затем мы вызываем функцию main(), в которой создаем объект «dEx» класса «DemoException». После этого у нас есть определение блока «try», которое при обнаружении выдает исключение. Здесь мы создаем объект «dEx».
Далее мы устанавливаем блок «catch», чтобы перехватывать исключение и обрабатывать его. Мы передаем ссылку на исключение класса в качестве параметра, чтобы перехватить исключение, полученное из него. Внутри блока «catch» мы вызываем функцию What() для «Exception», чтобы получить сообщение об исключении на консоли.
После выполнения данной программы пользовательское сообщение об исключении перехватывается и выводится на консоль:
Пример 2. Программа для создания специального исключения с использованием двух классов
В программе особое внимание уделяется обработке нескольких исключений, которые можно обрабатывать независимо, определив несколько классов.
#include
с использованием пространство имен стандартный ;
сорт оценка1 { } ;
сорт оценка2 { } ;
интервал основной ( ) {
пытаться {
бросать оценка1 ( ) ;
}
ловить ( оценка1 е ) {
расчет << «Исключение Evaluation1 поймано!» << конец ;
}
пытаться {
бросать оценка2 ( ) ;
}
ловить ( оценка2 е ) {
расчет << «Исключение оценки 2 обнаружено!» << конец ;
}
возвращаться 0 ;
}
В данном коде у нас есть определение двух классов: «Оценка1» и «Оценка2», которые сейчас пусты. После этого мы выполняем функцию main() программы. Здесь мы устанавливаем блок try{}, в котором ключевое слово «throw» используется для создания экземпляра класса «Evaluation1()». Это означает, что исключение «Evaluation1» выдается, если в программе внутри этого блока «try» возникает какое-либо исключение. После этого у нас есть блок catch{}, в котором исключение перехватывается и отображается сообщение об исключении.
Аналогично у нас есть определение другого блока try{} для класса «Evaluation2». Внутри этого блока try{} мы добавляем экземпляр класса «Evaluation2». При этом выдается исключение «Evaluation2», если здесь возникает ошибка. Затем мы вызываем блок catch{} для отображения сообщения об исключении с помощью команды «cout», если исключение обнаружено в этом блоке.
В консоль выбрасываются два исключения из разных блоков «try-catch», которые обрабатываются двумя разными классами.
Пример 3. Программа для создания пользовательского исключения с помощью конструктора
Программа использует конструктор для обработки исключения. Несмотря на то, что мы не можем получить значения из конструктора, мы можем добиться этого с помощью блока «try-catch».
#includeс использованием пространство имен стандартный ;
сорт Тест {
интервал вал ;
общественный :
Тест ( интервал н )
{
пытаться {
если ( н == 0 )
вал '=' н ;
отображать ( ) ;
}
ловить ( константа голец * опыт ) {
расчет << «Обнаружено исключение \п ' ;
расчет << опыт << конец ;
}
}
пустота отображать ( )
{
расчет << 'Значение = ' << вал << конец ;
}
} ;
интервал основной ( )
{
Тест ( 0 ) ;
расчет << «Снова создаю экземпляр \п ' ;
Тест ( 1 ) ;
}
В данном коде мы устанавливаем класс «Test», где переменная объявлена как «val» целочисленного типа. Затем у нас есть определение функции-конструктора «Test()», которая передается с переменной «n». Затем мы устанавливаем блок «try-catch» в функции-конструкторе «Test()». Блок try вызывается с помощью оператора if(). Если значение «n» равно нулю, блок «catch» перехватит исключение, и сообщение об исключении будет выдано в командной строке. Значение «n» сохраняется в переменной «val» при ее инициализации.
После этого мы вызываем функцию display(), чтобы показать значение, хранящееся в переменной «val». Далее у нас есть определение блока «catch», в котором обрабатывается исключение, выданное блоком «try». Наконец, мы вызываем функцию main(). Внутри которого мы вызываем конструктор Test(). Конструктор запускается, когда создается объект класса «Test()» и указывается значение «0», для которого генерируется исключение.
После этого мы снова вызываем класс «Test()», чтобы создать экземпляр, которому передается значение 1. Здесь конструктор не выдаст никаких исключений, поскольку значение не равно 0. Функция display() выполнит выполните и распечатайте значение «val».
Пользовательское исключение выдается на консоли путем вызова конструктора. Кроме того, когда условие удовлетворено, конструктор выполняется без каких-либо исключений.
Пример 4. Программа для создания пользовательского исключения
Здесь программа обрабатывает и перехватывает исключение, определенное пользователем по запросу в командной строке.
#include#include <исключение>
с использованием пространство имен стандартный ;
сорт МоеДемо : общественный исключение {
общественный :
константа голец * что ( ) константа бросать ( )
{
возвращаться «Исключение! Пробовал делить на ноль.! \п ' ;
}
} ;
интервал основной ( )
{
пытаться
{
интервал н1, н2 ;
расчет << «Введите два целых числа: \п ' ;
принимать пищу >> n1 >> n2 ;
если ( n2 == 0 )
{
МоеДемо №3 ;
бросать n3 ;
}
еще
{
расчет << 'n1/n2 = ' << n1 / n2 << конец ;
}
}
ловить ( исключение & отлично )
{
расчет << отл. что ( ) ;
}
}
В данном коде мы сначала определяем класс MyDemo(), который является зависимым классом исключения. После этого мы устанавливаем публичную функцию What() с ключевым словом «virtual». Функция What() вызывается для получения причины исключения в программе, когда функция throw() генерирует исключение. Затем у нас есть функция main(), в которой определены блоки try-catch{} для обнаружения и обработки исключения. Внутри блока try{} мы объявляем две переменные, «n1» и «n2», значения которых берутся у пользователя с помощью команды «cin». Когда получены значения для каждой переменной «n1» и «n2», условие «if» проверит, равна ли переменная «n2» 0 или нет. В этом случае выдается исключение или возвращаются результаты деления. Наконец, у нас есть блок catch{}, который принимает ссылку на класс «исключение» в качестве унаследованного от него параметра.
Вывод показывает, когда условие не выполнено и программа выполняется без исключения:
Кроме того, мы определяем значение «0» для переменной «n2», чтобы показать, как исключение генерируется и перехватывается в программе.
Заключение
В заключение мы продемонстрировали важную концепцию C++, которая является исключением. Исключение препятствует регулярному выполнению программы. Для этого мы использовали ключевые слова «throw», «try» и «catch» для обработки исключения, которое происходит в программе. Мы использовали эти ключевые слова в предыдущих примерах для другой обработки исключения.