Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Книга C++.doc
Скачиваний:
24
Добавлен:
10.11.2019
Размер:
2.48 Mб
Скачать

Практический пример

Рассмотрим практический пример корректного возведения в степень

try.h

#if !defined TRY_H

#define TRY_H

class Error

{

int b; // Основание

int e; // Показатель степени

public:

Error(int, int);

void Report(); // Отчет о значениях, вызвавших

// исключительную ситуацию

};

#endif

 

try.cpp

#include <iostream.h>

#include "try.h"

Error::Error(int bb, int ee)

{ // Инициализация данных для

// функции Report()

b = bb;

e = ee;

}

void Error::Report()

{ // Отображение значений,

// вызвавших исключительную

// ситуацию

cout << "Domain error: " << "base: " << b

<< " exponent: " << e << endl;

}

 

Программа

#include <iostream.h>

#include <math.h>

#include "try.h"

void Run(); // Выполненить программу. (Повторно вызывается из main)

int Power(int, int); // Функция производит

// корректное возведение

// вещественного числа в

// вещественную степень

void main()

{

for(;;) // Пока не введены правильные значения

{

try // Проверка на наличие

// исключительных ситуаций

{

Run();

cout << "Program is ending normally\n";

return; // Если не было исключительных

// ситуаций

}

catch(...) // Перехват любой исключительной

// ситуации

{

cout << "Error detected: Try again!\n";

}

}

}

void Run()

{

try // Проверка на наличие

// исключительных ситуаций

{

int base, exponent, result;

cout << "base:\t\t";

cin >> base;

cout << "exponent:\t";

cin >> exponent;

result = Power(base, exponent);

cout << "Result = " << result << endl;

}

catch(Error& e)

{

e.Report(); // Отображение сообщения об ошибке

throw e; // Передача исключительной ситуации

// в место вызова (в main())

}

}

int Power(int b, int e)

{

if(b == 0 && e<0)

throw Error(b, e);

return pow(b, e);

}

Домашнее задание

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

  2. Перепишите функцию-член vect::operator[](int) таким образом, чтобы генерировать исключение "превышение диапазона", если используется неправильный индекс.

  3. Перепишите класс stack одного из предыдущих домашних заданий таким образом, чтобы генерировать исключения для такого количества условий, какое Вы считаете приемлемым. (Например, невозможность выделить нужное количество памяти, переполнение стека и т.д.)