Перехват базовых и производных классов как исключений в C++ и Java

Опубликовано: 15 Сентября, 2022

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

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

  • Если и базовый, и производный класс перехватываются как исключения, то блок catch производного класса должен стоять перед базовым классом.
  • Если мы сначала поместим базовый класс, то блок catch производного класса никогда не будет достигнут. Например, следующий код C++ выводит «Caught Base Exception »

Вывод приведенного выше кода C++ :

prog.cpp: In function ‘int main()’:
prog.cpp:20:5: warning: exception of type ‘Derived’ will be caught
    catch (Derived d) {
    ^
prog.cpp:17:5: warning:    by earlier handler for ‘Base’
    catch (Base b) {

В приведенном выше коде C++, если мы изменим порядок операторов catch, оба оператора catch станут доступными.

Ниже приведена модифицированная программа, которая печатает «Caught Derived Exception».

Выход:

Caught Derived Exception

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

Например, следующий код Java не компилируется с сообщением об ошибке «Производное исключение уже было перехвачено».

Ошибка:

prog.java:11: error: exception Derived has already been caught
   catch(Derived d) {}