Спецификация исключения

Синтаксис

Заголовок_функции 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 Реализовать класс для хранения двенадцатеричных чисел. Реализовать метод перевода числа из двенадцатеричной системы счисления в тринадцатеричную. Проверить правильность перевода числа из двенадцатеричной системы счисления в тринадцатеричную.

 


Понравилась статья? Добавь ее в закладку (CTRL+D) и не забудь поделиться с друзьями:  



double arrow
Сейчас читают про: