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

UptoLike

Андрианова А.А., Исмагилов Л.Н., Мухтарова Т.М.
{
out << "Матрица" << endl;
for(int i = 0; i < ob.m; i++)
{
for(int j = 0; j < ob.n; j++)
out << ob[i][j] << "\t";
out << endl;
}
}
else
out << "Матрица пустая" << endl;
return out;
}
// оператор получения строки матрицы
template <class T> T* Matrix<T>::operator [](int i)
{
return a[i];
}
// оператор сложения двух матриц
template <class T>
Matrix<T> Matrix<T>::operator +(Matrix<T>& ob)
{
if(ob.n == n && ob.m == m)
{
Matrix<T> temp(m, n);
for(int i = 0; i < m; i++)
for(int j = 0; j < n; j++)
temp.a[i][j] = a[i][j] + ob.a[i][j];
return temp;
}
else
throw DimensionSumException();
}
// оператор умножения двух матриц
template <class T>
Matrix<T> Matrix<T>::operator *(Matrix<T>& ob)
{
if(n == ob.m)
{
Matrix<T> 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] = temp.a[i][j] +
a[i][k] * ob.a[k][j];
return temp;
218
                                Андрианова А.А., Исмагилов Л.Н., Мухтарова Т.М.
          {
                 out << "Матрица" << endl;
                 for(int i = 0; i < ob.m; i++)
                 {
                      for(int j = 0; j < ob.n; j++)
                           out << ob[i][j] << "\t";
                      out << endl;
                 }
          }
          else
               out << "Матрица пустая" << endl;
          return out;
      }

      // оператор получения строки матрицы
      template  T* Matrix::operator [](int i)
      {
           return a[i];
      }

      // оператор сложения двух матриц
      template 
      Matrix Matrix::operator +(Matrix& ob)
      {
           if(ob.n == n && ob.m == m)
           {
                Matrix temp(m, n);
                for(int i = 0; i < m; i++)
                     for(int j = 0; j < n; j++)
                          temp.a[i][j] = a[i][j] + ob.a[i][j];
                return temp;
           }
           else
                throw DimensionSumException();
      }

      // оператор умножения двух матриц
      template 
      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] = temp.a[i][j] +
                                         a[i][k] * ob.a[k][j];
                return temp;

218