Рубрики

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

Вывод следующей программы

#include<iostream>

using namespace std;

  

class Base {};

class Derived: public Base {};

int main()

{

   Derived d;

   try {

       throw d;

   }

   catch(Base b) {

        cout<<"Caught Base Exception";

   }

   catch(Derived d) {

        cout<<"Caught Derived Exception";

   }

   return 0;

}

(A) Пойманное производное исключение
(B) Пойманное Основное Исключение
(C) Ошибка компилятора

Ответ: (Б)
Объяснение: Если и базовый, и производный классы перехвачены как исключения, блок catch производного класса должен находиться перед базовым классом. Если сначала поставить базовый класс, блок захвата производного класса никогда не будет достигнут.

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

Тест на этот вопрос

Рекомендуемые посты:

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

0.00 (0%) 0 votes