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

UptoLike

Андрианова А.А., Исмагилов Л.Н., Мухтарова Т.М.
методом какого-либо класса и поэтому все операнды операции
указываются в этой функции в качестве параметров. При этом возникает
проблема доступа к данным объекта класса. Напомним, что структурные
свойства класса обычно являются закрытыми членами класса и
недоступны для других функций. Существует механизм, который
позволяет дать возможность доступа к закрытым членам класса из
некоторой внешней функции или методов другого класса. Данный
механизм называют дружественностью. Если функция является
дружественной классу, в объявление класса включается ее прототип,
предваренный ключевым словом friend:
class Matrix
{
. . .
friend Matrix operator*(double, Matrix);
. . .
};
Реализация дружественной функции будет иметь следующий вид:
// операция умножения числа на матрицу
Matrix operator * (double b, Matrix ob)
{
Matrix temp(ob.m, ob.n);
// заполнение матрицы-результата
for(int i = 0; i < ob.m; i++)
for(int j = 0; j < ob.n; j++)
temp.a[i][j] = ob.a[i][j] * b;
return temp;
}
Вызов этой операции "*" будет таким:
. . .
Matrix a(2,3);
a.InputMatrix();
Matrix c = 5 * a;
. . .
Отметим, что в качестве дружетвенных функций могут выступать не
только операции, но и обычные функции, которым необходим доступ к
закрытым элементам класса.
82
                               Андрианова А.А., Исмагилов Л.Н., Мухтарова Т.М.
методом какого-либо класса и поэтому все операнды операции
указываются в этой функции в качестве параметров. При этом возникает
проблема доступа к данным объекта класса. Напомним, что структурные
свойства класса обычно являются закрытыми членами класса и
недоступны для других функций. Существует механизм, который
позволяет дать возможность доступа к закрытым членам класса из
некоторой внешней функции или методов другого класса. Данный
механизм называют дружественностью. Если функция является
дружественной классу, в объявление класса включается ее прототип,
предваренный ключевым словом friend:

     class Matrix
     {
          .    .    .
          friend Matrix operator*(double, Matrix);
          .    .    .
     };

     Реализация дружественной функции будет иметь следующий вид:
     // операция умножения числа на матрицу
     Matrix operator * (double b, Matrix ob)
     {
          Matrix temp(ob.m, ob.n);
          // заполнение матрицы-результата
          for(int i = 0; i < ob.m; i++)
               for(int j = 0; j < ob.n; j++)
                    temp.a[i][j] = ob.a[i][j] * b;
          return temp;
     }

     Вызов этой операции "*" будет таким:

     .    .    .
     Matrix a(2,3);
     a.InputMatrix();
     Matrix c = 5 * a;
     .    .    .


    Отметим, что в качестве дружетвенных функций могут выступать не
только операции, но и обычные функции, которым необходим доступ к
закрытым элементам класса.




82