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?
'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:
A friend of Derived
can access exactly what Derived
itself can - that is, any member of Derived
, and any public or protected member of any base class, or of any public or protected grand-parent class, but not any private members of base classes, or members of private grand-parent classes.
Private members are not accessible in derived classes.
The friend function has access to all members of Derived. It doesn't have access to any members of Base that Derived can't access. Derived can't access Base::c because Base::c is private.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With