Синтаксис
Заголовок_функции throw(список типов)
void foo() throw(int, over_flow);
void noex(int i) throw();
Terminate() и unexpected()
Обработчик terminate() вызывается, когда для обработки исключения не поставлен другой обработчик. По умолчанию вызывается функция abort().
Обработчик unexpected() вызывается, когда исключения не было в списке спецификации исключения
Пример кода, реализующего исключение
Главный модуль
#include "vect.h"
using namespace std;
void g(int n)
{ try {
//блок try - контекст для принятия решения о том, какие
//обработчики вызываются для установленного исключения
vect a(n);
}
catch (int n) // обработчик
{
cerr<< "SIZE ERROR " << n <<endl;
g(10);
}
catch (const char* error) // обработчик
{
cerr<< error <<endl;
abort();
}
}
void main()
{
extern void g(int n);
g(-1);
system("pause");
}
Файл vect.h:
#include <iostream>
class vect
{ private:
int* p;
int size;
public:
vect() { size = 11; p = new int[size]; }
vect(int n);
~vect() { delete [] p; }
int& element(int i);
int ub() const { return (size - 1); }
};
vect::vect(int n)
{ if(n< 1) // оговоренное предусловие
throw (n); // устанавливается исключение
p = new int[n];
|
|
if(p == 0) // оговоренное постусловие
throw ("FREE STORE EXHAUSTED"); // устанавливается
// исключение
}
int&vect::element(int n)
{ if(n < 0 || n > size-1)
throw ("ILLEGAL NUMBER OF ELEMENT");
// устанавливается исключение
return (p[n]);
}
Контрольные вопросы
1. Какую цель преследует использование в программе обработки исключений?
2. Как оформляется блок обработки исключений?
3. Что такое обработчики исключений?
Варианты заданий
Номер варианта | Задание |
1 | Реализуйте класс для хранения целых чисел без знака. Опишите метод умножения двух целых, обработайте ошибку переполнения сверху (overflow). |
2 | Реализуйте класс для хранения целых чисел без знака. Опишите метод деления двух целых, обработайте ошибку переполнения снизу (underflow). |
3 | Реализуйте класс для хранения целых чисел без знака. Реализуйте метод сложения двух целых. Породите и обработайте ошибку переполнения сверху (overflow). |
4 | Реализуйте класс для хранения целых чисел без знака. Опишите метод деления двух целых, обработайте ошибку деления на ноль (zero division). |
5 | Реализуйте класс «массив целых чисел». Переопределите оператор ++ для указателя на массив целых, обработайте ошибку выхода за границы массива. |
6 | Реализуйте класс для хранения номера телефона. Опишите метод анализа номера телефона, обработайте ошибки динамического выделения памяти, обработайте ошибку задания номера в неверном формате (допустимый формат - +7(095)555-44-33). |
7 | Реализуйте класс «список целых чисел». Обработайте ошибки динамического выделения памяти. Перегрузите оператор [] и обработайте ошибку выхода за границы списка. |
8 | Реализуйте класс для хранения даты. Опишите метод, возвращающий день недели. Обработайте ошибки динамического выделения памяти. Обработайте ошибки неверного дня или месяца. |
9 | Реализуйте класс «числа с плавающей запятой». Опишите метод умножения двух чисел с плавающей запятой, обработайте ошибку переполнения сверху (overflow). |
10 | Реализуйте класс «числа с плавающей запятой». Опишите метод деления двух чисел с плавающей запятой, обработайте ошибку переполнения снизу (underflow). |
11 | Реализуйте класс «числа с плавающей запятой». Опишите метод деления двух чисел с плавающей запятой, обработайте ошибку деления на ноль (zero division). |
12 | Реализуйте класс «очередь» из строк. Реализуйте методы для вставки в очередь и удаления. Породите и обработайте ошибки динамического выделения памяти, переполнения очереди. |
13 | Реализуйте класс «очередь» из целых чисел. Опишите оператор [] для очереди элементов, обработайте ошибку выхода за границы очереди. |
14 | Реализуйте класс «вектор» из целых чисел. Опишите оператор [] для вектора элементов, обработайте ошибку выхода за границы массива. |
15 | Реализуйте класс «двоичное дерево». В качестве ключа для распределения данных используйте целые числа, в качестве самих данных– вещественные числа. Обработайте ошибки динамического выделения памяти. Переопределите оператор [] для доступа к данным дерева по значению ключа, породите и обработайте ошибку отсутствия нужных элементов в дереве. |
16 | Реализуйте класс для хранения личных данных (ФИО). Обработайте ошибки динамического выделения памяти. Обработайте ошибки задания ФИО (допустимый формат – «только буквы, без некоторых букв вначале слова»). |
17 | Реализуйте класс для хранения сетевого адреса в формате IPv4. Обработайте ошибки динамического выделения памяти. Обработайте ошибки задания адреса (допустимый формат– четыре числа от 0 до 255, разделенные точками, исключая некоторые недопустимые комбинации). |
18 | Реализуйте класс для хранения цепных дробей (список неповторяющихся целых чисел). Опишите методы для вставки нового числа и нахождения i-го числа. Породите и обработайте ошибки динамического выделения памяти и вставки неверного числа. |
19 | Реализуйте класс «битовая карта» на основе целых чисел. Опишите оператор [] для определения i-го бита. Породите и обработайте ошибку выхода за границы карты. |
20 | Реализуйте класс для хранения массива географических координат. Породите и обработайте ошибки динамического выделения памяти и ошибки задания неверной широты и/или долготы. |
21 | Реализовать класс для хранения двоичных чисел. Реализовать метод перевода числа из двоичной системы счисления в троичную. Проверить правильность перевода числа из двоичной системы счисления в троичную. |
22 | Реализовать класс для хранения троичных чисел. Реализовать метод перевода числа из троичной системы счисления в четырнадцатеричную. Проверить правильность перевода числа из троичной системы счисления в четырнадцатеричную. |
23 | Реализовать класс для хранения четверичных чисел. Реализовать метод перевода числа из четверичной системы счисления в пятеричную. Проверить правильность перевода числа из четверичной системы счисления в пятеричную. |
24 | Реализовать класс для хранения восьмеричных чисел. Реализовать метод перевода числа из восьмеричной системы счисления в шестеричную. Проверить правильность перевода числа из восьмеричной системы счисления в шестеричную. |
25 | Реализовать класс для хранения двоичных чисел. Реализовать метод правильность перевода числа из двоичной системы счисления в семеричную. Проверить правильность перевода числа из двоичной системы счисления в семеричную. |
26 | Реализовать класс для хранения тринадцатеричных чисел. Реализовать метод перевода числа из тринадцатеричной системы счисления в восьмеричную. Проверить правильность перевода числа из тринадцатеричной системы счисления в восьмеричную. |
27 | Реализовать класс для хранения одиннадцатеричных чисел. Реализовать метод перевода числа из одиннадцатеричной системы счисления в девятиричную. Проверить правильность перевода числа из одиннадцатеричной системы счисления в девятиричную. |
28 | Реализовать класс для хранения семеричных чисел. Реализовать метод перевода числа из семеричной системы счисления в одиннадцатеричную. Проверить правильность перевода числа из семеричной системы счисления в одиннадцатеричную. |
29 | Реализовать класс для хранения троичных чисел. Реализовать метод перевода числа из восемнадцатеричной системы счисления в девятнадцатеричную. Проверить правильность перевода числа из восемнадцатеричной системы счисления в девятнадцатеричную. |
30 | Реализовать класс для хранения двенадцатеричных чисел. Реализовать метод перевода числа из двенадцатеричной системы счисления в тринадцатеричную. Проверить правильность перевода числа из двенадцатеричной системы счисления в тринадцатеричную. |
|
|
|
|