Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
ООП Ответы все.docx
Скачиваний:
23
Добавлен:
01.03.2016
Размер:
71.65 Кб
Скачать

43.Средства возбуждения исключительных ситуаций

Программное возбуждение исключительной ситуации производится с помощью оператора throw, после которого указывается оператор создания объекта-исключения: throw new ТипИсключения();

Если после частичной обработки требуется повторно возбудить исключительную ситуацию e, используется вызов throw e; Для проверяемых исключений всегда требуется явное возбуждение. При возбуждении исключения во время выполнения какого-либо метода прерывается основной ход программы, и идёт процесс обработки исключения.

Исключительная ситуация – это особая, экстремальная ситуация, не планируемая заранее. ^ Не следует использовать исключения в качестве конструкций, на которых основаны часто повторяющиеся в программе действия.

44. Обработка исключительных ситуаций

В Си++ есть встроенный механизм обработки ошибок, который называется обработкой исключительных ситуаций (exception handling). Этот механизм упрощает реализацию реакции на ошибки, которые происходят во время выполнения программ. Обработка исключительных ситуаций (исключений) организуется с помощью трех операторов: try, catch и throw. Правила расположения операторов try и catch можно представить следующим образом: try ( / / блок возбуждения исключительной ситуации } catch (typel arg) { // блок перехвата исключительной ситуации типа type1 } catch (type2 arg) { // блок перехвата исключительной ситуации типа type2 } ... catch (typeN arg) { // блок перехвата исключительной ситуации типа typeN } Блок try должен содержать ту часть программы, в который требуется отслеживать ошибки. Это могут быть как несколько операторов внутри одной функции, так и все операторы внутри функции main() (что ведет к отслеживанию ошибок во всей программе). Возбужденное исключение перехватывается оператором catch, который соответствует этому конкретному типу исключения. Возбуждение исключительной ситуации выполняется оператором throw:

45. Обработка иерархии классов исключительных ситуаций.

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

Мы можем определить базовый класс Excp, которому наследуют оба наши класса исключений. Он инкапсулирует данные и функции-члены, общие для обоих производных:

class Excp { ... };

class popOnEmpty : public Excp { ... };

class pushOnFull : public Excp { ... };

Одной из операцией, которые предоставляет базовый класс, является вывод сообщения об ошибке. Эта возможность используется обоими классами, стоящими ниже в иерархии:

class Excp {

public:

// напечатать сообщение об ошибке

static void print( string msg ) {

cerr << msg << endl;

}

};

46. Единицы компиляции программы, файлы заголовков и реализации

Программа С++ состоит из одной или нескольких единиц компиляции. Каждая единица компиляции представляет собой отдельный файл исходного кода, обычно имеющий расширение .cpp (другими распространенными расширениями являются .cc и .cxx); она обрабатывается компилятором за один шаг. Для каждой единицы компиляции компилятор генерирует объектный файл с расширением .obj (в Windows) или .о (в Unix и Mac OS X). Объектный файл — это бинарный файл, содержащий машинный код для той архитектуры, на которой будет выполняться программа.

После компиляции всех файлов .cpp мы можем собрать все объектные файлы для создания исполняемого модуля, используя специальную программу, называемую компоновщиком (linker). Компоновщик соединяет объектные файлы в единое целое и назначает адреса памяти функциям и другим символическим ссылкам, которые содержатся в единицах компиляции.