Объектно-ориентированный язык программирования С++ в примерах. Сивохин А.В. - 22 стр.

UptoLike

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

class matrix /*-определение класса матрица через вектор; */
{ vector v[4];
/* Необходимые функции члены класса матрица; */
friend vector multiply(matrix&,vector&);
};/*-конец определения класса матрица; */
В оба класса здесь введена одна и та же функция-друг mul-
tiply,выполняющая следующие действия:
vector multiply(matrix& m,vector& v) /*-внешняя функция; */
{ vector r; /*-возращаемый вектор результата; */
for(int i=0;i<=3;i++)
{r.v[i]=0;/*-предполагается,что в классе век- */
/* тор определена операция[]; */
for (int j=0;j<=3;j++) /*-строка на столбец; */
r.v[i]+=m.v[i][j]*v.v[j];
} /*-конец цикла по элементам вектора; */
return r;
};/*-конец определения внешней функции умножения */
/* матрицы на вектор; */
Если все функции одного класса являются друзьями другого,
то используется такая краткая запись:
class x { friend class y; ... };
Рассмотренный способ включения внешних функций в определе-
ние составного типа позволяет по иному построить иерархию
составных типов,когда все функции,необходимые для доступа к
полям типов,являются внешними и включаются в соответствующие
типы как функции-друзья.Достоинства и недостатки такого под-
хода рассматриваются в [1].
Поскольку класс является в языке C++ основным средством ре-
ализации принципов объектно-ориентированного программирования,
перечислим виды членов,используемых для его определения:
а)определения констант и переменных основных типов:char,int,
float и т.д.;
22
 class matrix /*-определение класса матрица через вектор;      */
       { vector v[4];
         /* Необходимые функции члены класса матрица;          */
         friend vector multiply(matrix&,vector&);
       };/*-конец определения класса матрица;                  */


 В оба класса здесь введена одна и та же функция-друг mul-
tiply,выполняющая следующие действия:


 vector multiply(matrix& m,vector& v) /*-внешняя функция;      */
        { vector r; /*-возращаемый вектор результата;          */
           for(int i=0;i<=3;i++)
                {r.v[i]=0;/*-предполагается,что в классе век- */
                         /* тор определена операция[];         */
                for (int j=0;j<=3;j++) /*-строка на столбец;   */
                   r.v[i]+=m.v[i][j]*v.v[j];
                } /*-конец цикла по элементам вектора;         */
           return r;
         };/*-конец определения внешней функции умножения      */
           /* матрицы на вектор;                               */


  Если все функции одного класса являются друзьями другого,
то используется такая краткая запись:


  class x { friend class y; ... };


  Рассмотренный способ включения внешних функций в определе-
ние составного типа позволяет по иному построить иерархию
составных типов,когда все функции,необходимые для доступа к
полям типов,являются внешними и включаются в соответствующие
типы как функции-друзья.Достоинства и недостатки такого под-
хода рассматриваются в [1].
  Поскольку класс является в языке C++ основным средством ре-
ализации принципов объектно-ориентированного программирования,
перечислим виды членов,используемых для его определения:
  а)определения констант и переменных основных типов:char,int,
float и т.д.;


                              22