Объектно-ориентированное программирование на языке С++. Лясин Д.Н - 44 стр.

UptoLike

Составители: 

44
m2.operator int()
Если бы операция умножения была перегружена методом класса array2 ,
а не внешней функцией, то для нее необходимо было бы определить лишь
один формальный параметрчерез него в функцию передавался бы лишь вто-
рой операнд операции умножения. Первый операнд в этом случае становится
тем объектом, для которого вызывается операция функция:
//Листинг 19. Определение операции-функции как метода класса
class array2
{
array2& operator*(array2& m2) //функция перегрузки операции
//умножения как метод класса
{ if(m==m2.n)
{array2 *pta;
int s;
pta=new array2(n,m2.m);
for(int i=0;i<n;i++)
{ for(int j=0;j<m2.m;j++)
{s=0;
for(int k=0;k<m;k++)
s+=mas[i][k]*m2.mas[k][j];
pta->mas[i][j]=s;
}
}
return *pta;
}
else cout<<"Error
}
};
main()
{ array2 m(2,3),m1(3,4),m2(2,4);
m2=m*m1;//можно записать в виде m2=m.operator *(m1)
}
Перегрузка операции присваивания необходима для класса array2 в связи
с тем, что обычное копирование компонентных данных из одного объекта в
другой, которое производит операция присваивания по умолчанию, не подхо-
дит для поставленной задачи. Если написать выражение m1=m2, не переопре-
деляя операцию присваивания, то компонент mas одного объекта будет скопи-
     m2.operator int()
     Если бы операция умножения была перегружена методом класса array2 ,
а не внешней функцией, то для нее необходимо было бы определить лишь
один формальный параметр – через него в функцию передавался бы лишь вто-
рой операнд операции умножения. Первый операнд в этом случае становится
тем объектом, для которого вызывается операция функция:
   //Листинг 19. Определение операции-функции как метода класса
   class array2
    { …
      array2& operator*(array2& m2)      //функция перегрузки операции
                                        //умножения как метод класса
       { if(m==m2.n)
           {array2 *pta;
            int s;
             pta=new array2(n,m2.m);
             for(int i=0;imas[i][j]=s;
                 }
               }
               return *pta;
             }
                      else cout<<"Error
                   }
                     …
        };
     main()
     { array2 m(2,3),m1(3,4),m2(2,4);
       …
        m2=m*m1;//можно записать в виде m2=m.operator *(m1)
      }
    Перегрузка операции присваивания необходима для класса array2 в связи
с тем, что обычное копирование компонентных данных из одного объекта в
другой, которое производит операция присваивания по умолчанию, не подхо-
дит для поставленной задачи. Если написать выражение m1=m2, не переопре-
деляя операцию присваивания, то компонент mas одного объекта будет скопи-

                                           44