>>220
friend クラス、関数はメンバじゃないから、アクセス制御とは当然関係ない。
だからこういうこともできる。

#include <iostream>
class Foo;
class Bar {
public:
    void print(const Foo&);
};

class Foo {
    int m_;
    friend void Bar::print(const Foo& f) { std::cout << f.m_ << std::endl; }
public:
    Foo(int n = 0) : m_(n) {}
};

int main()
{
    Foo foo;
    Bar bar;
    bar.print(foo);
}