89792

Дружественные функции и классы

Лекция

Информатика, кибернетика и программирование

Дружественной функцией класса называется функция, которая, не являясь его компонентом, имеет доступ к его защищенным и собственным компонентам. Функция не может стать другом класса без «его согласия»...

Русский

2015-05-13

36.91 KB

3 чел.

Дружественные функции и классы

Дружественные функции

Дружественной функцией класса называется функция, которая, не являясь его компонентом, имеет доступ к его защищенным и собственным компонентам. Функция не может стать другом класса без «его согласия»;

Дружественная функция:

  •  не может быть компонентной функцией того класса, по отношению к которому определяется как дружественная;
  •  может быть компонентной функцией другого ранее определенного класса;
  •  может быть глобальной функцией;
  •  может быть дружественной по отношению к нескольким классам;
  •  при вызове не получает указателя this.

Пример #9. Точка и прямая на плоскости

#include <iostream.h>

class line2;

class point2

{ float x,y;

public: 

point2(float xn=0.0, float yn=0.0)

{x=xn; y=yn;}

friend float uclon(point2, line2);

};

class line2

{ float A, B, C;

public:

line2(float a, float b, float c)

{A=a; B=b; C=c;}

friend float uclon(point2, line2);

};

float uclon(point2 p, line2 l)

{ return l.A* p.x+l.B* p.y+ l.C;}

void main()

{point2 P(16.0, 12.3);

line2 L(10.0,-42.3, 24.0);

cout <<“\n Уклонение точки Р от прямой L: ”;

cout<<uclon(P, L);

}

Дружественные классы

Класс может быть дружественным другому классу. Это означает, что все компонентные функции класса являются дружественными для другого класса. Дружественный класс должен быть определен вне тела класса, предоставляющего дружбу.

Пример #10. Точка и вектор в N-мерном пространстве

#include <iostream.h>

#include <stdlib.h>

class pointN

{ int Npoint;//размерность пространства

double *x;//указатель на массив координат точки

friend class vectorN;//дружественный класс

public:

pointN(int n, double d=0.0);//конструктор точек

};

// определение конструктора

pointN::pointN(int n, double d)

{ Npoint=n;

x=new double [Npoint];

for (int i=0; i<Npoint; i++) x[i]=d;}

class vectorN

{ double *xv; //указатель на массив координат вектора

int Nvector;//размерность пространства

public:

vectorN (pointN, pointN);//конструктор векторов

double norm();

};

// определение конструктора

vectorN::vectorN(pointN beg, pointN end)

{ if (beg.Npoint != end.Npoint)

{ cerr<<“\n Ошибка в размерностях точек!”;

exit(1);}

Nvector=beg.Npoint;

xv=new double [Nvector];

for (int i=0; i<Nvector; i++) xv[i]=end.x[i]-beg.x[i];

}

// вычисление нормы вектора

double vectorN::norm()

{ double dd=0.0;

for (int i=0; i<Nvector; i++)  dd+=xv[i]*xv[i];

return dd;

}

void main(void)

{

pointN A(2, 4.0); pointN B(2, 2.0);

vectorN V(A,B);

cout<<“\n Норма вектора AB:” <<V.norm();

pointN X(3, 2.0);

vectorN Z(A,X);//ошибка в размерностях точек

}


 

А также другие работы, которые могут Вас заинтересовать

54940. Основы сельского хозяйства. Почвы 91 KB
  Главнейшее качество почвы плодородие то есть способность удовлетворять потребность растений в элементах минерального питания воде обеспечивать их корневые системы достаточным количеством воздуха и тепла. Плодородие почвы обусловлено запасом элемента питания их формами содержанием гумуса его составом мощностью гумусовых горизонтов механическим составом интенсивностью...
54942. Формирование игровых навыков, ловкости, целеустремленности и потребности к систематическим занятиям физической культурой 33 KB
  5 повторов Лицом друг к другу на расстоянии 89 метров передачи в парах стоя на месте изза головы без удара об пол. 5 повторов Лицом друг к другу на расстоянии 89 метров передачи в парах стоя на месте одной рукой с ударом об пол. 5 повторов Обучение и закрепления броска с 2х шагов с правой стороны. 5 повторов Обучение и закрепления броска с 2х шагов с левой стороны.
54943. Семь чудес света 26 KB
  Строительство пирамиды продолжалось около 20 лет и было закончено в 2560 году до нашей эры. Жители Каира сняли облицовку с пирамиды для того чтобы построить новые дома. Внутри пирамиды Хеопса расположены три палаты усыпальницы.
54944. Техническое обслуживание сцепления. Возможные неисправности в сцеплении и методы их устранения 156 KB
  Образовательная: узнать какие виды работ проводятся при техническом обслуживании и ремонте сцепления. Развивающая: научиться ремонтировать механизмы сцепления. Объявить тему практического занятия: Техническое обслуживание сцепления.
54945. Морфология и физиология вирусов. Классификация вирусов, формы и размеры вирусов, архитектура вириона, вирусные включения, культивирование вирусов 31.48 KB
  Содержание: Изучение морфологии и физиологии вирусов. Классификация вирусов формы и размеры вирусов архитектура вириона вирусные включения культивирование вирусов.
54946. «Музей одной картины». Иван Иванович Шишкин, «Рожь» 40.5 KB
  Иван Иванович Шишкин Рожь. Сегодня мы поговорим о картине Ивана Ивановича Шишкина которая называется Рожь. Рожь является блестящей попыткой решить эту задачу.