89792

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

Лекция

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

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

Русский

2015-05-13

36.91 KB

4 чел.

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

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

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

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

  •  не может быть компонентной функцией того класса, по отношению к которому определяется как дружественная;
  •  может быть компонентной функцией другого ранее определенного класса;
  •  может быть глобальной функцией;
  •  может быть дружественной по отношению к нескольким классам;
  •  при вызове не получает указателя 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);//ошибка в размерностях точек

}


 

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

66659. Потребительские свойства услуг 62 KB
  Показатели назначения услуг характеризуют набор свойств услуги определяющий качество выполнения функций для которых она предназначена. Эта группа показателей делится на четыре подгруппы: показатели применения; показатели совместимости; показатели предприятия...
66661. Иннокентий Петрович Герасимов 122.5 KB
  Каждый ученый-почвовед творец. Почвоведу как ни кому другому нужно уметь слушать и слышать природу. Недостаточно ограничиться только своим объектом почвой и недостаточно будет сухих лабораторных данных сколь информативными они бы ни были. И не зря здесь говорится именно ...
66662. Классицизм в архитектуре Москвы 851.12 KB
  Как определенное направление сформировался во Франции, в XVII веке. Французский классицизм освобождал человека от религиозно-церковного влияния, утверждая личность как высшую ценность бытия. Русский классицизм не просто воспринял теорию западноевропейскую...
66665. Социальная стратификация в современном обществе 43.5 KB
  Безработные как особая страта в структуре общества. Разные социологи подходят к решению вопроса о стратификации общества с различных точек зрения. Стратификация социологическое понятие обозначающее: структуру общества и отдельных ее слоев; систему признаков социального расслоения неравенства.
66666. Основи педагогіки 139.5 KB
  Педагогіка це фундаментальна суспільна наука яка вивчає закономірності здійснення навчальновиховної діяльності а також функціонування систем освіти. Саме поняття педагогіка має дуже давню історію. Використання слів педагогіка дидактика і т.
66667. Жизнь и научная деятельность Константина Дмитриевича Глинки 105.79 KB
  Его отец дворянин Дмитрий Константинович Глинка один из прямых продолжателей рода великого композитора и музыкального деятеля М. Полынов описывая фотографию тех лет на которых запечатлены Глинка с супругой подчеркивает что форма солдата саперной...