Объектно-ориентированное программирование на С#. Андрианова А.А - 55 стр.

UptoLike

55
// заполнение матрицы-результата
for (int i = 0; i < m1.a.GetLength(0); i++)
for (int j = 0; j < m2.a.GetLength(1); j++)
for(int k = 0; k < m1.a.GetLength(1); k++)
newM.a[i,j] += m1.a[i,k] * m2.a[k,j];
return newM;
}
else
{
// количество столбцов первой матрицы должно быть
// равно количеству строк второй матрицы
throw new Exception("Матрицы таких размеров
перемножать нельзя");
}
}
// операция умножения матрицы на число
static public Matrix operator *(Matrix m, double d)
{
// создание матрицы-результата
Matrix newM = new Matrix(m.a.GetLength(0),
m.a.GetLength(1));
// заполнение матрицы-результата
for (int i = 0; i < m.a.GetLength(0); i++)
for (int j = 0; j < m.a.GetLength(1); j++)
newM.a[i,j] = m.a[i,j] * d;
return newM;
}
// операция умножения числа и матрицы
static public Matrix operator *(double d, Matrix m)
{
// создание матрицы-результата
Matrix newM = new Matrix(m.a.GetLength(0),
m.a.GetLength(1));
// заполнение матрицы-результата
newM = m * d;
return newM;
}
Для перегрузки отдельных видов операций существуют особенности, о
которых требуется сказать отдельно.
При перегрузке операций сравнения обязательно в качестве типа
возвращаемого значения указывается тип bool. Кроме того, такие операции
перегружаются парно операция "==" вместе с "!=", "<" вместе с ">",
"<=" вместе с ">=".
         // заполнение матрицы-результата
         for (int i = 0; i < m1.a.GetLength(0); i++)
            for (int j = 0; j < m2.a.GetLength(1); j++)
               for(int k = 0; k < m1.a.GetLength(1); k++)
                  newM.a[i,j] += m1.a[i,k] * m2.a[k,j];
         return newM;
       }
       else
       {
          // количество столбцов первой матрицы должно быть
          // равно количеству строк второй матрицы
          throw new Exception("Матрицы таких размеров
                                    перемножать нельзя");
       }
   }

   // операция умножения матрицы на число
   static public Matrix operator *(Matrix m, double d)
   {
      // создание матрицы-результата
      Matrix newM = new Matrix(m.a.GetLength(0),
                                m.a.GetLength(1));
      // заполнение матрицы-результата
      for (int i = 0; i < m.a.GetLength(0); i++)
         for (int j = 0; j < m.a.GetLength(1); j++)
            newM.a[i,j] = m.a[i,j] * d;
      return newM;
   }

   // операция умножения числа и матрицы
   static public Matrix operator *(double d, Matrix m)
   {
      // создание матрицы-результата
      Matrix newM = new Matrix(m.a.GetLength(0),
                                m.a.GetLength(1));
      // заполнение матрицы-результата
      newM = m * d;
      return newM;
   }

     Для перегрузки отдельных видов операций существуют особенности, о
которых требуется сказать отдельно.
     При перегрузке операций сравнения обязательно в качестве типа
возвращаемого значения указывается тип bool. Кроме того, такие операции
перегружаются парно – операция "==" вместе с "!=", "<" вместе с ">",
"<=" вместе с ">=".



                                                                     55