Бьерн Страуструп.
Язык программирования С++
136
};
Функция-друг не имеет никаких особенностей, за исключением права доступа к закрытой части класса.
В частности, в такой функции нельзя использовать указатель this, если только она действительно не
является членом класса. Описание friend является настоящим описанием. Оно вводит имя функции в
область видимости класса, в котором она была описана, и при этом происходят обычные проверки на
наличие других описаний такого же имени в этой области видимости. Описание friend может находится
как в общей, так и в частной частях класса, это не имеет значения.
Теперь можно написать функцию multiply, используя элементы вектора и матрицы непосредственно:
vector multiply(const matrix& m, const vector& v)
{
vector
r;
for (int i = 0; i<3; i++) { // r[i] = m[i] * v;
r.v[i] = 0;
for ( int j = 0; j<3; j++)
r.v[i]
+=m.v[i][j]
*
v.v[j];
}
return
r;
}
Отметим, что подобно функции-члену дружественная функция явно описывается в описании класса, с
которым дружит. Поэтому она является неотъемлемой частью интерфейса класса наравне с функцией-
членом.
Функция-член одного класса может быть другом другого класса:
class x {
//
...
void
f();
};
class y {
//
...
friend void x::f();
};
Вполне возможно, что все функции одного класса являются друзьями другого класса. Для этого есть
краткая форма записи:
class x {
friend class y;
//
...
};
В результате такого описания все функции-члены y становятся друзьями класса x.
Достарыңызбен бөлісу: