Язык С++ и программирование на нем. Рейзлин В.И. - 95 стр.

UptoLike

Составители: 

97
void f(){
cl obj1; cl obj2 = obj1; // Используется конструктор копирования.
cl obj3;
obj3 = obj1; // Присваивание!
}
Не всегда требуется при выполнении присваивания просто созда-
вать копию. Если требуется нечто иное, то нужно переопределить опе-
рацию присваивания для класса.
18.10. Дружественные функции
Могут встретиться ситуации, когда желательно иметь доступ к
личным данным класса, минуя функции-члены. Наиболее распростра-
нена ситуация, когда функция-член одного класса должна иметь доступ
к личным членам другого.
Рассмотрим снова пример с классами coord и triang.
class coord {double x, y, z;
public:
coord ();
coord (double, double, double = 0);
coord (coord & c);
};
class triang {coord vert1, vert2, vert3;
public:
triang ();
triang (coord &v1, coord &v2, coord &v3);
};
Пусть нам необходимо добавить в класс triang функцию-член,
вычисляющую координаты центра треугольника.
Язык предоставляет для некоторых функций, как обычных, так и членов
некоторого класса X, возможность получения доступа к личным членам
класса Y. Такая функция называется привилегированной в классе Y.
Говорят также, что класс X является дружественным классу Y.
Для объявления привилегированной функции используется слу-
жебное слово friend. Чтобы функция стала привилегированной в классе
Y, она должна быть объявлена в этом классе как дружественная функ-
ция.
Напишем три функции-члена класса triang, вычисляющие коор-
динаты центра треугольника по каждой из осей: