Вы можете создавать (статические) защищенные методы в родительском объекте, которые позволят вам делать подобные вещи.
class MyFreind
{
private:
int m_member;
friend class Father;
};
class Father
{
protected:
static int& getMyFreindMember(MyFreind& io_freind) { return io_freind.m_member; }
};
class Son : public Father
{
public:
void doSomething(MyFriend& io_freind)
{
int& friendMember = getMyFreindMember(io_freind);
// ....
} // ()
};
Это, однако, обходит инкапсуляцию, поэтому вам, вероятно, стоит взглянуть на свой дизайн еще раз.