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

UptoLike

54
z.OutputMatrix();
try
{
z = x * y; // умножение матриц
z.OutputMatrix();
}
catch (Exception ex)
{
// перехват исключения, связанного с несоответствием
// размером перемножаемых матриц
Console.WriteLine(ex.Message);
}
}
}
}
Подробнее разберем методы, перегружающие операторы. Оператор
"~" будет использоваться для транспонирования матрицы. Этот оператор
является унарным, т.е. имеет один операнд. Поэтому в списке параметров
метода указывается объект класса Matrix. Результатом является новая
матрица, которая создается внутри метода и является транспонированной к
исходной.
// метод, перегружающий операцию траспонирование матрицы
static public Matrix operator ~(Matrix m)
{
Matrix newM = new Matrix(m.a.GetLength(1),
m.a.GetLength(0));
for (int i = 0; i < m.a.GetLength(0); i++)
for (int j = 0; j < m.a.GetLength(1); j++)
newM.a[j, i] = m.a[i, j];
return newM;
}
Оператор "*" может использоваться с операндами различных типов,
например, можно матрицу умножать на матрицу, матрицу умножать на число
или число на матрицу. Поэтому эту операцию можно перегрузить
несколькими методами, которые будут отличаться списком параметров:
// операция перемножения двух матриц
static public Matrix operator *(Matrix m1, Matrix m2)
{
if(m1.a.GetLength(1) == m2.a.GetLength(0))
{
// создание матрицы-результата
Matrix newM = new Matrix(m1.a.GetLength(0),
m2.a.GetLength(1));
             z.OutputMatrix();

             try
             {
                z = x * y;   // умножение матриц
                z.OutputMatrix();
             }
             catch (Exception ex)
             {
                // перехват исключения, связанного с несоответствием
                // размером перемножаемых матриц
                Console.WriteLine(ex.Message);
             }
         }
     }
}

     Подробнее разберем методы, перегружающие операторы. Оператор
"~" будет использоваться для транспонирования матрицы. Этот оператор
является унарным, т.е. имеет один операнд. Поэтому в списке параметров
метода указывается объект класса Matrix. Результатом является новая
матрица, которая создается внутри метода и является транспонированной к
исходной.

     // метод, перегружающий операцию траспонирование матрицы
     static public Matrix operator ~(Matrix m)
     {
        Matrix newM = new Matrix(m.a.GetLength(1),
                                  m.a.GetLength(0));
        for (int i = 0; i < m.a.GetLength(0); i++)
           for (int j = 0; j < m.a.GetLength(1); j++)
              newM.a[j, i] = m.a[i, j];
        return newM;
     }

     Оператор "*" может использоваться с операндами различных типов,
например, можно матрицу умножать на матрицу, матрицу умножать на число
или число на матрицу. Поэтому эту операцию можно перегрузить
несколькими методами, которые будут отличаться списком параметров:

     // операция перемножения двух матриц
     static public Matrix operator *(Matrix m1, Matrix m2)
     {
        if(m1.a.GetLength(1) == m2.a.GetLength(0))
        {
           // создание матрицы-результата
           Matrix newM = new Matrix(m1.a.GetLength(0),
                                    m2.a.GetLength(1));

54