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);//ошибка в размерностях точек

}


 

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

26875. Задний мозг 3.96 KB
  Задний мозг metencephalon состоит из мозжечка cerebellum и мозгового варолиева моста pons cerebri Varoli . Между ними остаётся глубокая щель верхушка шатра fastigium являющаяся дорсальным отделом четвертого мозгового желудочка. Построен из серого и белого мозгового вещества. Построен он из белого мозгового вещества по периферии и серого в виде ядер.
26876. Продолговатый мозг 4.44 KB
  От начала пирамид отходит VI пара отводящий черепномозговых нервов. От перекреста XII пара подъязычный; от боковой поверхности продолговатого мозга отходят: пары нервов лицевой слуховой языкоглоточный блуждающий и добавочный. На нём выступает лицевой холмик colliculus facialis где сосредоточены ядра отводящего и лицевого нервов. Позади лицевого холмика расположено поле подъязычного нерва area hypoglossi а латерапьнее от него находится серое крыло alia cinerea в котором лежат ядра...
26877. Желудочки головного мозга 5 KB
  Желудочки головного мозга. К желудочкам головного мозга относятся: Боковые желудочки ventriculi laterales telencephalon; Боковые желудочки головного мозга лат. ventriculi laterales полости в головном мозге содержащие ликвор наиболее крупные в желудочковой системе головного мозга. Третий желудочек ventriculus tertius diencephalon; Третий желудочек мозга ventriculus tertiusнаходится между зрительными буграми имеет кольцевидную форму так как в него прорастает промежуточная масса зрительных бугровmassa intermedia thalami.
26878. Оболочки и сосуды головного и спинного мозга 4.04 KB
  Оболочки и сосуды головного и спинного мозга Головной и спинной мозг окружен тремя мозговыми оболочками meninges. В области большого затылочного отверстия оболочки головного мозга переходят в оболочки спинного мозга. 4 показаны оболочки головного мозга. Твердая оболочка спинного мозга отделена от внутренней поверхности позвоночного канала от надкостницы позвоночного канала надоболочечным эпидуральным пространством.
26879. Общие закономерности строения и ветвления спинномозговых нервов 5.94 KB
  Спинномозговые нервы от спинного мозга отходят метамерно в соответствии с делением костной основы и подразделяются на шейные грудные поясничные крестцовые и хвостовые. Черепномозговые нервы отходят от продолговатого с XII по V пару и среднего мозга IV и III пары. Черепномозговые нервы отходят преимущественно одним корнем соответствующим дорсальному или вентральному корешку спинномозгового нерва. Строение Спинномозговые или спинальные нервы 31 пара берут начало в спинном мозге и выходят из него между соседними позвонками почти по...
26880. Грудные спинномозговые нервы. Плечевое сплетение 3.12 KB
  Грудные спинномозговые нервы. Основные нервы Дорсальный нерв лопатки тп. dorsalisscapulae Надлопаточный нерв п. suprascapularrs Подлопаточные нервы шї.
26881. Поясничные спинномозговые нервы. Поясничное сплетение 3.08 KB
  Только первые 2 4 поясничных нерва имеют белые соединительные ветви но все получаютсерые соединительные ветви и делятся на дорсальные и Вентральные ветви. Дорсальные ветви идут в разгибатели йоясницы и отдают латеральные кожные ветви в ягодичные краниальные нервы nn. Вентральные ветви образуют поясничное сплетение т plexuslumbales соединяющееся с крестцовым сплетением Подвздошноподчревный нерв п. genitofemoral і s 16 начинается от L III II и IV и отдает ветви в малую поясничную квадратную поясничную и брюшные мышцы и идет по...
26882. Крестцовые спинномозговые нервы. Крестцовое сплетение 2.6 KB
  Крестцовые спинномозговые нервы эти нервы делятся на передние и задние ветви при этом передние ветви выходят на тазовую поверхность крестца в полость таза задние на дорсальную его поверхность. Задние ветви в свою очередь делятся на внутренние и наружные. Внутренние ветви иннервируют нижние сегменты глубоких мышц спины и оканчиваются кожными ветвями в области крестца ближе к средней линии. Наружные ветви I III крестцовых спинномозговых нервов направляются книзу и имеют название средних кожных нервов ягодиц пп.
26883. Седалищный нерв 5.99 KB
  Седалищный нерв Седалищный нерв п. Он и ннервирует всю конечность за исключением некоторых ягодичных мышц сгибателей тазобедренного сустава и разгибателей коленного сустава. Проходит позади тазобедренного сустава и делится на большеберцовый и малоберцовый нервы идущие в области бедра вместе по медиальной поверхности двуглавой мышцы бедра почти до коленного сустава. Малоберцовый нерв п.