Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Программирование_С++_ч_3.doc
Скачиваний:
14
Добавлен:
22.11.2018
Размер:
217.6 Кб
Скачать

Список исключений

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

Типы исключений перечисляются в скобках через запятую после ключевого слова throw, расположенного за списком параметров функции, например:

void f1 ( ) throw (int, const char*) {/*Тело функции */}

void f2 ( ) throw (Oops*) {/* */} // Oops* - указатель на класс Oops

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

void f ( ) throw ( ) {

}

Указание списка исключений ни к чему не обязывает – функция может породить исключение, которое она обещала не использовать. Эта ситуация обнаруживается во время исполнения программы и приводит к вызову стандартной функции unexpected, которая по умолчанию вызывает функцию terminate. Функция terminate по умолчанию вызывает функцию abort, которая зварешает выполнение программы.

Иерархии исключений

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

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

Существует ряд стандартных исключений, которые генерируются операциями или функциями С++. Все они являются производными от библиотечного класса exception, описанного в заголовочном файле <stdexcept>. Например, операция new при неудачном выделении памяти генерирует исключение bad_alloc.

Можно определять собственные исключения, производные от стандартных.

Задание

Добавьте в описание “функционального” калькулятора обработку исключительных ситуаций (недопустимый тип данных, операнд, являющийся делителем в операции деления, равен нулю, аргумент логарифма отрицателен или равен нулю и т. д.).

Библиографический список

  1. Павловская Т.А. С / C++. Программирование на языке высокого уровня

/ Т.А. Павловская. СПб, 2002.

  1. Павловская Т.А. С / C++. Структурное программирование: практикум

/ Т.А.Павловская, Ю.А. Щупак. СПб, 2002.

  1. Павловская Т.А. С / C++. Объектно-ориентированное программирование: практикум / Т.А.Павловская, Ю.А.Щупак СПб, 2002.

  2. Культин Н.Б. С++ Builder./ Н.Б.Культин. СПб, 2004.

Оглавление

Екатеринбург 1

2006 1

ВВЕДЕНИЕ 3

Классы 5

Описание класса 5

Описание объектов 7

Указатель this 8

Конструкторы 9

Конструктор копирования 12

Конструктор копирования для класса monstr: 13

Статические элементы класса 13

Статические поля 13

Статические методы 14

Дружественные функции и классы 15

Дружественные функции 15

Дружественный класс 16

Деструкторы 17

Перегрузка унарных операций 19

Перегрузка бинарных операций 20

Перегрузка операции присваивания 21

Перегрузка операции приведения типа 22

Наследование 22

Ключи доступа 22

Простое наследование 23

Правила наследования методов 27

Виртуальные методы и механизм позднего связывания 29

Абстрактные классы 30

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

Синтаксис исключений 31

Перехват исключений 33

Список исключений 35

Иерархии исключений 36

Библиографический список 38

ПРОГРАММИРОВАНИЕ НА ЯЗЫКЕ С++