Общество любителей CСтатьи

Ответы на некоторые вопросы по С++ (3 стр)

Автор:

82. Назовите ключевые слова С++, которые используются для обработки исключений.
try, catch, throw

83. Исключение — это:
1) событие;
2) ситуация;
3) объект;
4) ошибка в программе;
5) прерывание;

3)

84. Каким образом исключение генерируется?
Происходит раскрутка стека

85. Каковы функции контролируемого блока?
Отловить исключения которые сгенериованы внутри него.

86. Что обозначается ключевым словом catch?
1) контролируемый блок;        (try-cath)
2) блок обработки исключения;  (catch)
3) секция-ловушка;              (try)
4) генератор исключения;        (throw)
5) обработчик прерывания;      (???)

2)

87. Какого типа может быть исключение?
Любого.

88. Сколько параметров разрешается писать в заголовке секции-ловушки?
Один.

89. Какими способами разрешается передавать исключение в блок обработки?
По значению, по ссылке или по указателю.

90. Объясните, каким образом преодолеть ограничение на передачу единственного параметра в блок обработки.
Использовать несколько блоков обработки.

91. Почему нельзя выполнять преобразования типов исключений при передаче в секцию-ловушку?
Можно исполнять dynamic_cast downcasting.
Если имелось в виду то что не работают операторы преобразования, то потому что catch-блок хранит информацию о конкретнных типах.
TODO: написать подробней и понятней

92. Напишите конструкцию, которая позволяет перехватить любое исключение.
catch(...) {}

93. Могут ли контролируемые блоки быть вложенными?
Да.

94. Зачем нужен «контролируемый блок-функция» и чем он отличается от обычного контролируемого блока?
Нужен для перехвата исключения в списке инициализации конструктора. Обычно используется для преобразования типа исключения (ловится исключение однго типа и кидается другого).
catch-блок конструктора не может использовать return; catch-блок конструктора обязан завершиться генерацией исключения и если это не происходит явно, то при выходе из catch-блока происходит вызов "throw;"
Пример:
class A : B {C c;};
A::A()
try : B(...), c(...)
{
...
} catch (...) { ... }
{ /*ctor body*/ }

95. Перечислите возможные способы выхода из блока обработки.
Нормальный выход. Генерация другого исключения. Повторная генерация исключения: throw;.

96. Каким образом исключение «передать дальше»?
throw;

97. Сколько секций-ловушек должно быть задано в контролируемом блоке?
1 .. +inf

98. Что такое «спецификация исключений»?
Указание списка исключений, которые может генерировать функция:
void f() throw ( const char *, std::logic_error ); // функция может генерировать исключения типа const char *, std::logic_error
void f() throw (); // функция не генерирует никакие исключения

99. Что происходит, если функция нарушает спецификацию исключений?
Вызов обработчика unexpected

100. Учитывается ли спецификация исключений при перегрузке функций?
Спецификация исключений потомка должна не менее "строгой",
за исключением того что потомок может генерировать исключения производные от исключений предка.
(Т.е. в соответствии с принципом LSP)

101. Что такое «иерархия исключений»?
иерархия исключений она и есть иерархия исключений :)

102. Существуют ли стандартные исключения? Назовите два-три типа стандартных исключений.
exception <- logic_error <- domain_error
                        <- invalid_argument
                        <- length_error
                        <- out_of_range
        <- runtime_error <- range_error
                        <- overflow_error
                        <- underflow_error

103. Поясните «взаимоотношение» исключений и деструкторов.
При генерации исключения из-за раскрутки стека вызываются деструкторы локальных объектов.
Если в этот момент сгенерируется новое исключение это приведет к вызову terminate()

104. Объясните, зачем может понадобиться подмена стандартных функций завершения.
Для собственной обработки подобных ситуаций (обычно для их протоколирования).

105. Какие виды нестандартных исключений вы знаете?
bad_typeid, bad_typecast

106. В чем отличие механизма структурной обработки исключений Windows от стандартного механизма?
???

Страницы: 1 2 3 4 5 6 Следующая »

28 июля 2006 (Обновление: 13 янв 2009)

Комментарии [11]