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

UptoLike

Андрианова А.А., Исмагилов Л.Н., Мухтарова Т.М.
void OutputMatrix();// метод вывода матрицы
. . .
};
Перегрузим в классе Matrix операцию умножения двух матриц.
Данная операция является бинарной, т.е. имеет два операнда типа
Matrix. Если опрерация является методом класса Matrix, то ее вызов
возможен только через объект класса. Этим объектом является первый
операнд операции умножения. Он передается в метод неявно и к его
свойствам и методам можно обращаться напрямую или с помощью
указателя this. В качестве параметра в этом случае передается только
второй операнд операции.
// операция перемножения двух матриц
Matrix Matrix::operator * (Matrix& ob)
{
if(n == ob.m)
{
// создание матрицы-результата
Matrix temp(m, ob.n);
// заполнение матрицы-результата
for(int i = 0; i < m; i++)
for(int j = 0; j < ob.n; j++)
for(int k = 0; k < n; k++)
temp.a[i][j] +=
(a[i][k] * ob.a[k][j]);
return temp;
}
else
// количество столбцов первой матрицы должно
// быть равно количеству строк второй матрицы
throw "Матрицы таких размеров
перемножать нельзя";
}
Вызов перегруженной операции можно осуществить также как и
вызов других методов класса:
. . .
Matrix a(2,3), b(3,4);
a.InputMatrix();
b.InputMatrix();
Matrix c = a.operator*(b);
. . .
80
                              Андрианова А.А., Исмагилов Л.Н., Мухтарова Т.М.
          void OutputMatrix();// метод вывода матрицы
          .    .    .
     };

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

     // операция перемножения двух матриц
     Matrix Matrix::operator * (Matrix& ob)
     {
          if(n == ob.m)
          {
               // создание матрицы-результата
               Matrix temp(m, ob.n);
               // заполнение матрицы-результата
               for(int i = 0; i < m; i++)
                    for(int j = 0; j < ob.n; j++)
                         for(int k = 0; k < n; k++)
                              temp.a[i][j] +=
                                        (a[i][k] * ob.a[k][j]);
               return temp;
          }
          else
               // количество столбцов первой матрицы должно
               // быть равно количеству строк второй матрицы
               throw "Матрицы таких размеров
                                        перемножать нельзя";
     }

    Вызов перегруженной операции можно осуществить также как и
вызов других методов класса:

     .    .    .
     Matrix a(2,3), b(3,4);
     a.InputMatrix();
     b.InputMatrix();
     Matrix c = a.operator*(b);
     .    .    .




80