friend function in derived class with private inheritance

c++, inheritance

Solution

'Friendship' grants access to the class that declares the friend - it's not transitive. To use a bad analogy - my friends are not necessarily my dad's friends.

The C++ FAQ has a bit more detail:

- http://www.parashift.com/c++-faq-lite/friends.html#faq-14.4

Problem

If a class Derived is inherited privately from a class Base and the Derived class has a friend function f(), so what members can f() access from Derived class and Base class. ``` class Base { public: int a; protected: int b; private: int c; }; class Derived: private Base { void friend f() {} public: int d; protected: int e; private: int f; }; ``` I understand that if a class is inherited privately from the base class, everything is private in the derived class. But why in the code above, the function f() can access a, b, d, e, f but not c?

Original source