Объектно-ориентированное программирование на C++. Андрианова А.А - 15 стр.

UptoLike

Объектно-ориентированное программирование на С++
try
{
double** b = InverseMatrix (a, m, n);
}
catch(char* str)
{
cout << str << endl;
}
catch(int e)
{
cout << "Матрица является вырожденной" << endl;
}
. . .
Отметим, что в приведенном примере генерация исключительных
ситуаций происходит в функции вычисления обратной матрицы, а их
обработка в вызывающей ее функции. Таким образом, генерация
исключений и их обработка могут быть разделены между различными
функциями.
Если в блоке try присутствуют вызовы нескольких функций,
которые могут генерировать исключения разного вида, следует
предусмотреть обработку каждого из них в вызывающей программе.
Например, в блоке try производится сначала умножение двух матриц,
которое может сгенерировать исключение типа int со значением 1,
когда размеры перемножаемых матриц не соответствуют, а затем
вычисление обратной матрицы:
. . .
double** a, **b; // объявление матриц
int m, n, k, l; // размеры матрицы
. . .
try
{
// умножение матрицы a размерности m x n
// на матрицу b размерности k x l
double** c = MultiplyMatrix (a, m, n, b, k, l);
// получение обратной матрицы для матрицы a
double** d = InverseMatrix (a, m, n);
}
catch(char* s)
{
cout << s << endl;
}
catch(int i)
{
15
                          Объектно-ориентированное программирование на С++
    try
    {
          double** b = InverseMatrix (a, m, n);
    }
    catch(char* str)
    {
         cout << str << endl;
    }
    catch(int e)
    {
         cout << "Матрица является вырожденной" << endl;
    }
    .    .    .

    Отметим, что в приведенном примере генерация исключительных
ситуаций происходит в функции вычисления обратной матрицы, а их
обработка – в вызывающей ее функции. Таким образом, генерация
исключений и их обработка могут быть разделены между различными
функциями.
    Если в блоке try присутствуют вызовы нескольких функций,
которые могут генерировать исключения разного вида, следует
предусмотреть обработку каждого из них в вызывающей программе.
Например, в блоке try производится сначала умножение двух матриц,
которое может сгенерировать исключение типа int со значением 1,
когда размеры перемножаемых матриц не соответствуют, а затем
вычисление обратной матрицы:

    .    .    .
    double** a, **b;    // объявление матриц
    int m, n, k, l;     // размеры матрицы
    .    .    .
    try
    {
         // умножение матрицы a размерности m x n
         // на матрицу b размерности k x l
         double** c = MultiplyMatrix (a, m, n, b, k, l);
         // получение обратной матрицы для матрицы a
         double** d = InverseMatrix (a, m, n);
    }
    catch(char* s)
    {
         cout << s << endl;
    }
    catch(int i)
    {

                                                                        15