Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
ООП-ГОТОВО.doc
Скачиваний:
6
Добавлен:
01.04.2025
Размер:
174 Кб
Скачать
☆

Void main(){try{ throw 10; }

catch(int i) { cout << " error " << i << endl; }return;}

На экран выведется сообщение: error 10. Значение целого числа, выданное через throw i, хранится до завершения работы обработчика с целочисленной сигнатурой catch(int).

Пример переустановки исключения выглядит следующим образом:

catch(int n) {throw; // переустановка}

В С++ блоки try могут быть вложенными. Если в текущем блоке try нет соответствующего обработчика, выбирается обработчик из ближайшего внешнего блока try. Если он не обнаружен и там, тогда используется поведение по умолчанию. catch выглядит подобно объявлению функции с одним параметром без возвращаемого типа:

catch (char *message) { cerr << message << endl; exit(1); }

catch (.) { // действие, которое нужно приянть по умолчанию.

cerr << “ That’s all folks” << andl; abort(); }

В списке аргументов допускается сигнатура, которая соответствует любому параметру. Кроме того, формальный параметр может быть абстрактным объявлением. Это значит, что он может иметь информацию о типе без имени переменной. Обработчик вызывается соответствующим выражением throw. При этом фактически, происходит выход из блока try

Синтаксически Спецификация исключения представляет собой части объявления функции и имеет форму:

заголовок_функции throw (список типов)

Список типов - это список типов, которые может иметь выражение throw внутри функции. Если этот список пуст, компилятор может предположить, что throw не будет выполняться функцией.

Void foo() throw(int,over_flow);

Void noex(int I) throw();

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

10. Библиотека stl: назначение, основные элементы.

Стандартная библиотека шаблонов (Standard Template Library, STL) входит в стандартную библиотеку языка C++. В неё включены реализации наиболее часто используемых контейнеров и алгоритмов, что избавляет программистов от рутинного их переписывания.

Ядро библиотеки образуют три элемента: контейнеры, алгоритмы и итераторы. Контейнеры (containers) – это объекты, предназначенные для хранения других элементов. Например, vector, list, set. Ассоциативные контейнеры (associative containers) позволяют с помощью ключей получить быстрый доступ к хранящимся в них значениям. В каждом классе-контейнере определен набор функций для работы с ними. Например, список содержит функции для вставки, удаления и слияния элементов. Алгоритмы (algorithms) выполняют операции над содержимым контейнера. Существуют алгоритмы для инициализации, сортировки, поиска, замены содержимого контейнеров. Многие алгоритмы предназначены для работы с последовательностью (sequence), которая представляет собой линейный список элементов внутри контейнера. Итераторы (iterators) – это объекты, которые по отношению к контейнеру играют роль указателей. Они позволяют получить доступ к содержимому контейнера. С итераторами можно работать так же, как с указателями. К ним можно применить операции *, инкремента, декремента. Типом итератора объявляется тип iterator, который определен в различных контейнерах. В STL также поддерживаются обратные итераторы (reverse iterators). Обратными итераторами могут быть либо двунаправленные итераторы, либо итераторы произвольного доступа, но проходящие последовательность в обратном направлении.

Вдобавок к контейнерам, алгоритмам и итераторам в STL поддерживается ещё несколько стандартных компонентов. Главными среди них являются распределители памяти, предикаты и функции сравнения. У каждого контейнера имеется определенный для него распределитель памяти (allocator), который управляет процессом выделения памяти для контейнера. По умолчанию распределителем памяти является объект класса allocator. Можно определить собственный распределитель. В некоторых алгоритмах и контейнерах используется функция особого типа, называемая предикатом. Предикат может быть унарным и бинарным. Возвращаемое значение: истина либо ложь. Точные условия получения того или иного значения определяются программистом. Тип унарных предикатов UnPred, бинарных – BinPred. Тип аргументов соответствует типу хранящихся в контейнере объектов. Определен специальный тип бинарного предиката для сравнения двух элементов. Он называется функцией сравнения (comparison function). Функция возвращает истину, если первый элемент меньше второго. Типом функции является тип Comp.

Особую роль в STL играют объекты-функции. Объекты-функции  это экземпляры класса, в котором определена операция «круглые скобки» (). В ряде случаев удобно заменить функцию на объект-функцию. Когда объект-функция используется в качестве функции, то для ее вызова используется operator (). Пример:

class less{ public: bool operator()(int x, int y){ return x<y; } };