ВУЗ:
Составители:
Рубрика:
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
Страницы
- « первая
- ‹ предыдущая
- …
- 52
- 53
- 54
- 55
- 56
- …
- следующая ›
- последняя »
