При написании программы могут встречаться ситуации когда желательно иметь доступ к личным данным класса минуя функции члены. Наиболее распространенной является ситуация когда функции члены одного класса должны иметь доступ к личным членам другого.
Пример:
class Coord{
float x, y, z;
public:
Coord();
Coord(float, float, float=0);
Coord(Coord &c);
};
class Triang{
Coord vert1, vert2, vert3;
public:
Triang();
Triang(Coord&v1, Coord&v2, Coord&v3);
};
Язык представляет для функций как обычных так и являющихся членами какого-либо класса Х возможность получения доступа к личным членам класса Y. Для объявления привеллигерованной функции используется служебное слово friend.
Напишем три функции члена класса Triang вычисляющие координаты центра тяжести треугольника по каждой из осей.
Float Triang::mid x(){
Return(vert1.x+vert2.y+vert3.z)/3;}
//аналогично определяется mid y(), mid z()
Для того чтоб компилятор не выдал сообщения ошибки необходимо добавить в декларацию класса Coord следующее объявление:
class Coord{
//…
friend Triang::midx();
friend Triang::midy();
friend Triang::midz();
};
Достаточно распространенным является случай когда все функции члены одного класса является привеллигерованными в другом. Предусмотрена сокращенная форма записи для такого случая.
Пример:
class Coord{
//…
friend Triang;
//…
};
Привеллигерованные ф-ии. Ф-ии друзья.
24 Фев, 2009
