Перехват базовых и производных классов как исключений в C++ и Java
Исключение — это нежелательная ошибка или препятствие, которое программа выдает во время компиляции. Существуют различные методы обработки исключения, которое называется исключительной обработкой.
Давайте обсудим, что такое обработка исключений и как мы перехватываем базовые и производные классы как исключения в 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) {}