Друзья Пусть определено два класса, vector и matrix (вектор и матрица). Теперь определим функцию, умножающую матрицу на вектор. Пусть доступ к элементам вектора осуществляется через функцию elem( ), которая осуществляет проверку индекса, и что в matrix имеется аналогичная функция.
vector multiply(matrix& m, vector& v); { vector r; for (int i = 0; i
Функция не член, получившая право доступа к закрытой части класса, называется другом класса - friend class vector { float v[4]; friend vector multiply(matrix&, vector&); }; class matrix { vector v[4]; friend vector multiply(matrix&, vector&); };
Теперь можно написать функцию умножения, которая использует элементы векторов и матрицы непосредственно: vector multiply(matrix& m, vector& v); { vector r; for (int i = 0; i
Функция член одного класса может быть другом другого class x { void f(); }; class y {//... friend void x::f(); }; Все функции члены одного класса могут являются друзьями другого. Для этого есть более краткая запись: class x { friend class y; //. };