Промышленное производство
Промышленный Интернет вещей | Промышленные материалы | Техническое обслуживание и ремонт оборудования | Промышленное программирование |
home  MfgRobots >> Промышленное производство >  >> Industrial programming >> Язык C

Обработка исключений C++

Исключением является проблема, возникающая во время выполнения программы. Исключение C++ — это реакция на исключительное обстоятельство, возникающее во время работы программы, например, на попытку деления на ноль.

Исключения позволяют передавать управление из одной части программы в другую. Обработка исключений C++ основана на трех ключевых словах:try, catch, и бросить .

Предполагая, что блок вызовет исключение, метод перехватывает исключение, используя комбинацию try и поймать ключевые слова. Блок try/catch размещается вокруг кода, который может генерировать исключение. Код в блоке try/catch называется защищенным кодом, а синтаксис для использования try/catch выглядит следующим образом —

try {
   // protected code
} catch( ExceptionName e1 ) {
   // catch block
} catch( ExceptionName e2 ) {
   // catch block
} catch( ExceptionName eN ) {
   // catch block
}

Вы можете перечислить несколько поймать операторы для перехвата различных типов исключений в случае, если вы попробуете блок вызывает более одного исключения в разных ситуациях.

Вызов исключений

Исключения можно создавать в любом месте блока кода с помощью throw. утверждение. Операнд инструкции throw определяет тип исключения и может быть любым выражением, а тип результата выражения определяет тип выбрасываемого исключения.

Ниже приведен пример создания исключения при выполнении условия деления на ноль —

double division(int a, int b) {
   if( b == 0 ) {
      throw "Division by zero condition!";
   }
   return (a/b);
}

Перехват исключений

Подвох блокировать после попытки блок перехватывает любое исключение. Вы можете указать, какой тип исключения вы хотите перехватывать, и это определяется объявлением исключения, которое появляется в круглых скобках после ключевого слова catch.

try {
   // protected code
} catch( ExceptionName e ) {
  // code to handle ExceptionName exception
}

Приведенный выше код поймает исключение ExceptionName. тип. Если вы хотите указать, что блок catch должен обрабатывать исключение любого типа, которое выдается в блоке try, вы должны поместить многоточие ... между круглыми скобками, заключающими объявление исключения, следующим образом —

try {
   // protected code
} catch(...) {
  // code to handle any exception
}

Ниже приведен пример, в котором возникает исключение деления на ноль, и мы перехватываем его в блоке catch.

Живая демонстрация
#include <iostream>
using namespace std;

double division(int a, int b) {
   if( b == 0 ) {
      throw "Division by zero condition!";
   }
   return (a/b);
}

int main () {
   int x = 50;
   int y = 0;
   double z = 0;
 
   try {
      z = division(x, y);
      cout << z << endl;
   } catch (const char* msg) {
     cerr << msg << endl;
   }

   return 0;
}

Поскольку мы вызываем исключение типа const char* , поэтому при перехвате этого исключения мы должны использовать const char* в блоке catch. Если мы скомпилируем и запустим приведенный выше код, это даст следующий результат —

Division by zero condition!

Стандартные исключения C++

C++ предоставляет список стандартных исключений, определенных в . которые мы можем использовать в наших программах. Они расположены в иерархии классов родитель-потомок, показанной ниже —

Вот небольшое описание каждого исключения, упомянутого в приведенной выше иерархии —

<тд>

стандартное::исключение

Исключение и родительский класс всех стандартных исключений C++.

<тд>

std::bad_alloc

Это может быть вызвано новым .

<тд>

std::bad_cast

Это может быть вызвано с помощью dynamic_cast. .

<тд>

std::bad_exception

Это полезное устройство для обработки непредвиденных исключений в программе C++.

<тд>

std::bad_typeid

Это может быть вызвано идентификатором типа. .

<тд>

std::logic_error

Исключение, которое теоретически можно обнаружить, прочитав код.

<тд>

std::domain_error

Это исключение возникает при использовании математически недопустимого домена.

<тд>

std::invalid_argument

Это выдается из-за недопустимых аргументов.

<тд>

std::length_error

Это вызывается, когда создается слишком большая строка std::string.

<тд>

стандартный::out_of_range

Это может быть вызвано методом at, например, std::vector и std::bitset<>::operator[]().

<тд>

std::runtime_error

Исключение, которое теоретически невозможно обнаружить при чтении кода.

<тд>

std::overflow_error

Это вызывается, если происходит математическое переполнение.

<тд>

std::range_error

Это происходит, когда вы пытаетесь сохранить значение, выходящее за пределы допустимого диапазона.

<тд>

std::underflow_error

Это выдается, если происходит математическое занижение значения.

Старший № Исключение и описание
1
2
3
4
5
6
7
8
9
10
11
12
13
14

Определить новые исключения

Вы можете определить свои собственные исключения, наследуя и переопределяя Exception функциональность класса. Ниже приведен пример, который показывает, как вы можете использовать класс std::exception для реализации вашего собственного исключения стандартным способом —

Живая демонстрация
#include <iostream>
#include <exception>
using namespace std;

struct MyException : public exception {
   const char * what () const throw () {
      return "C++ Exception";
   }
};
 
int main() {
   try {
      throw MyException();
   } catch(MyException& e) {
      std::cout << "MyException caught" << std::endl;
      std::cout << e.what() << std::endl;
   } catch(std::exception& e) {
      //Other errors
   }
}

Это даст следующий результат —

MyException caught
C++ Exception

Здесь что() является общедоступным методом, предоставляемым классом исключений, и он был переопределен всеми дочерними классами исключений. Это возвращает причину исключения.


Язык C

  1. Операторы С++
  2. С++ Комментарии
  3. Шаблоны классов С++
  4. C Обработка файлов
  5. Обработка исключений Java
  6. Обработка исключений C++:пример Try, Catch, Throw
  7. Обработка исключений Python:попробовать, поймать, наконец и поднять [Пример]
  8. C - Обработка ошибок
  9. Обзор С++
  10. Константы/литералы С++