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

UptoLike

Объектно-ориентированное программирование на С++
при вычислении обратной матрицы исходная матрица
оказывается вырожденной.
При генерации исключений стандартных типов (целое число или
символьная строка) программисту приходится отслеживать типы
исключений и создавать для каждого из них свой обработчик (см. раздел
1.2). Например, пусть исключения генерируются в классе Matrix при
перемножении или сложении двух матриц в случае несоответствия
размеров.
Matrix Matrix::operator * (Matrix& ob)
{
if(n == ob.m)
{
// перемножение матриц
. . .
}
else
// количество столбцов первой матрицы должно
// быть равно количеству строк второй матрицы
throw "Матрицы таких размеров
перемножать нельзя";
}
Matrix Matrix::operator + (Matrix& ob)
{
if(n == ob.n && m == ob.m)
{
// сложение матриц
. . .
}
else
// размеры матриц должны совпадать
throw 1;
}
Тогда часть кода, проверяюшая наличие этих ошибок, будет иметь
вид:
. . .
try
{
Matrix a(m,n), b(n,k);
cin >> a >> b;
Matrix c = a * b;
cout << "a*b=" << c << endl;
Matrix d = a + b;
139
                                Объектно-ориентированное программирование на С++
          •при вычислении обратной      матрицы исходная матрица
           оказывается вырожденной.
     При генерации исключений стандартных типов (целое число или
символьная строка) программисту приходится отслеживать типы
исключений и создавать для каждого из них свой обработчик (см. раздел
1.2). Например, пусть исключения генерируются в классе Matrix при
перемножении или сложении двух матриц в случае несоответствия
размеров.

       Matrix Matrix::operator * (Matrix& ob)
       {
            if(n == ob.m)
            {
                 // перемножение матриц
                 .    .    .
            }
            else
                 // количество столбцов первой матрицы должно
                 // быть равно количеству строк второй матрицы
                 throw "Матрицы таких размеров
                                          перемножать нельзя";
       }

       Matrix Matrix::operator + (Matrix& ob)
       {
            if(n == ob.n && m == ob.m)
            {
                 // сложение матриц
                 .    .    .
            }
            else
                 // размеры матриц должны совпадать
                 throw 1;
       }

       Тогда часть кода, проверяюшая наличие этих ошибок, будет иметь
вид:

       .      .   .
       try
       {
              Matrix a(m,n),   b(n,k);
              cin >> a >> b;
              Matrix c = a *   b;
              cout << "a*b="   << c << endl;
              Matrix d = a +   b;
                                                                            139