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

}


 

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

16655. ФОРМА ДОГОВОРА УСТУПКИ ТРЕБОВАНИЯ И ПОСЛЕДСТВИЯ ЕЕ НЕСОБЛЮДЕНИЯ 34.71 KB
  ФОРМА ДОГОВОРА УСТУПКИ ТРЕБОВАНИЯ И ПОСЛЕДСТВИЯ ЕЕ НЕСОБЛЮДЕНИЯ Материал подготовлен с использованием правовых актов по состоянию на 29 ноября 2000 года В.А. БЕЛОВ Белов Вадим Анатольевич доцент кафедры гражданского права юридического факультета МГУ им. М.В....
16656. УВЕДОМЛЕНИЕ ДОЛЖНИКА ОБ УСТУПКЕ ТРЕБОВАНИЯ И ЕГО ЮРИДИЧЕСКОЕ ЗНАЧЕНИЕ 38.53 KB
  УВЕДОМЛЕНИЕ ДОЛЖНИКА ОБ УСТУПКЕ ТРЕБОВАНИЯ И ЕГО ЮРИДИЧЕСКОЕ ЗНАЧЕНИЕ Материал подготовлен с использованием правовых актов по состоянию на 29 ноября 2000 года В.А. БЕЛОВ Белов Вадим Анатольевич доцент кафедры гражданского права юридического факультета МГУ
16657. ЮРИДИЧЕСКАЯ ПРИРОДА ГОСУДАРСТВЕННОЙ РЕГИСТРАЦИИ ПРАВ НА НЕДВИЖИМОСТЬ И СДЕЛОК С НЕДВИЖИМОСТЬЮ 58.9 KB
  ЮРИДИЧЕСКАЯ ПРИРОДА ГОСУДАРСТВЕННОЙ РЕГИСТРАЦИИ ПРАВ НА НЕДВИЖИМОСТЬ И СДЕЛОК С НЕДВИЖИМОСТЬЮ Материал подготовлен с использованием правовых актов по состоянию на 13 сентября 2002 года В.А. БЕЛОВ Белов Вадим Анатольевич доцент кафедры гражданского права юр...
16658. КОЛИЧЕСТВО, ПЕРЕХОДЯЩЕЕ В КАЧЕСТВО 48.76 KB
  КОЛИЧЕСТВО ПЕРЕХОДЯЩЕЕ В КАЧЕСТВО Материал подготовлен с использованием правовых актов по состоянию на 7 декабря 2000 года В.А. БЕЛОВ Белов Вадим Анатольевич доцент кафедры гражданского права юридического факультета МГУ им. М.В. Ломоносова кандидат юридичес
16659. ИГРА И ПАРИ КАК ИНСТИТУТЫ ГРАЖДАНСКОГО ПРАВА 114.46 KB
  ИГРА И ПАРИ КАК ИНСТИТУТЫ ГРАЖДАНСКОГО ПРАВА Материал подготовлен с использованием правовых актов по состоянию на 14 июля 1999 года В.А. БЕЛОВ Белов Вадим Анатольевич доцент кафедры гражданского права юридического факультета МГУ им. М.В. Ломоносова кандидат юр...
16660. НЕКОТОРЫЕ ПРОБЛЕМЫ ПРЕКРАЩЕНИЯ ОБЯЗАТЕЛЬСТВ ЗАЧЕТОМ ВСТРЕЧНЫХ ТРЕБОВАНИЙ ПО ВЕКСЕЛЯМ 41.09 KB
  НЕКОТОРЫЕ ПРОБЛЕМЫ ПРЕКРАЩЕНИЯ ОБЯЗАТЕЛЬСТВ ЗАЧЕТОМ ВСТРЕЧНЫХ ТРЕБОВАНИЙ ПО ВЕКСЕЛЯМ на примере обязательств из кредитных договоров Материал подготовлен с использованием правовых актов по состоянию на 29 декабря 1998 года В.А. БЕЛОВ Белов Вадим Анатоль...
16661. ИСПОЛЬЗОВАНИЕ ВЕКСЕЛЯ ПРИ СОВЕРШЕНИИ ПРЕСТУПЛЕНИЙ 100.01 KB
  ИСПОЛЬЗОВАНИЕ ВЕКСЕЛЯ ПРИ СОВЕРШЕНИИ ПРЕСТУПЛЕНИЙ Материал подготовлен с использованием правовых актов по состоянию на 21 октября 1997 года В.А. БЕЛОВ Белов Вадим Анатольевич доцент кафедры гражданского права юридического факультета МГУ им. М.В. Ломоносова к
16662. АВТОМОБИЛЬ КАК ОБЪЕКТ ПРАВА СОБСТВЕННОСТИ ГРАЖДАНИНА 107.84 KB
  АВТОМОБИЛЬ КАК ОБЪЕКТ ПРАВА СОБСТВЕННОСТИ ГРАЖДАНИНА Материал подготовлен с использованием правовых актов по состоянию на 14 июля 1998 года В.А. БЕЛОВ В.А. Белов доцент кафедры гражданского права юридического факультета МГУ им. М.В. Ломоносова кандидат юридиче
16663. УСТУПКА ТРЕБОВАНИЙ ПО ДОГОВОРУ БАНКОВСКОГО СЧЕТА: ТЕОРИЯ И ПРАКТИКА 50.06 KB
  УСТУПКА ТРЕБОВАНИЙ ПО ДОГОВОРУ БАНКОВСКОГО СЧЕТА: ТЕОРИЯ И ПРАКТИКА В.А. БЕЛОВ В.А. Белов доцент кафедры гражданского права юридического факультета МГУ кандидат юридических наук. Договор банковского счета отличается рядом специфических качеств от других гр...