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

}


 

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

37542. Первые философы. На какой вопрос они пытались ответить 14.11 KB
  В качестве первоосновы предлагалась одна из природных стихий или их сочетание вода земля огонь воздух. Анаксимандр в качестве первоначала всего сущего считает апейрон беспредельное. Можно считать что Анаксимандр в определенной степени отходит от натурфилософского обоснования первоначала и дает более глубокое его толкование полагая в качестве первоначала не какойлибо конкретный элемент например воду а признавая таковым апейрон материю рассматриваемую как обобщенное абстрактное первоначало приближающееся по своей сущности к...
37543. ЛОГИКА И МЕТОДОЛОГИЯ НАУКИ СТРУКТУРА НАУЧНЫХ РЕВОЛЮЦИЙ 1.08 MB
  Кун Логика и методология науки СТРУКТУРА НАУЧНЫХ РЕВОЛЮЦИЙ Перевод с английского И. То счастливое обстоятельство что я с увлечением прослушал пробный университетский курс по физике читавшийся для неспециалистов позволило мне впервые получить некоторое представление об истории науки. К моему полному удивлению это знакомство со старыми научными теориями и самой практикой научного исследования в корне подорвало некоторые из моих основных представлений о природе науки и причинах ее достижений. Я имею в виду те представления которые ранее...
37545. ОСНОВЫ ФИЛОСОФСКИХ ЗНАНИЙ. Учебно-методическое пособие 792 KB
  Природа человека и смысл его существования 104 Тема 14. В современном представлении философией называется область теоретических знаний о мире в целом о месте человека в нем и о принципах взаимоотношения человека с миром. Мировоззрение это целостный взгляд на мир и место в нем человека. В его структуру входят: знания о мире; ценности с позиций которых человек осмысливает мир; убеждения и идеалы которые определяют поступки человека.
37546. ФІЛОСОФІЯ. МЕТОДИЧНІ ВКАЗІВКИ ДО ПРАКТИЧНИХ ЗАНЯТЬ 414 KB
  Написание рефератов по философии. Методические указания определяются рабочей программой конспектом лекций и дополнительно снабжаются краткой версией полнотекстовой базой данных философских источников кафедры психологии философии и образовательных технологий. Самостоятельное изучение курса философии базируется на принципах личного поиска исходя из мировоззрения личности и одновременно предметности освоения своей специальности будущими учеными. Для сохранения диалектической природы философии в предложенных для самостоятельного чтения...
37548. КУРС ФИЛОСОФИИ В ТАБЛИЦАХ 48.16 KB
  Философия о человеке Историческая эпоха философии Что такое человек Античность Микрокосмос Душа тело Душа есть проявление идеи Платон Душа это форма человека Аристотель Средние века Духовность душа тело; духовность есть связь человека с Богом посредством веры любви надежды совести Новое время Существо разумное и действующее по законам разума Локк Кант Проявление общественных отношений Маркс Существо волевое и страстное Ницше ХХ в. Философия об обществе Историческая эпоха философии Что такое общество Античность...
37550. Возникновение и история развития проблемы защиты информации 762.5 KB
  Возникновение и история развития проблемы защиты информации Проблема зашиты информации вообще говоря имеет многовековую историю. Применение же специальных мер в целях сохранения информации в тайне практиковалось еще в древние времена: достоверно например известно что выдающийся политический деятель и полководец древнего Рима Цезарь использовал для этих целей криптографическое преобразование текстов сообщений вошедшее в историю под названием шифра Цезаря хотя по современным представлениям и весьма примитивное. Но поскольку здесь...