#include <iostream>
using namespace std;

class IParent
{
public:

    virtual void foo(  ) = 0;
};

class  Root : public IParent {
private:
 virtual void foo( ) override { cout << "foo!"; }
};

class Test {
public:
 Test( IParent& p ) : m_parent(p) {
     m_parent.foo(); // Wieso kann ich hier eine private Methode von Root aufrufen?
  }
private:
  IParent& m_parent;
};

int main()
{
  //Ausgeführter Code:
  Root root;
  Test t( root );
  root.foo();
}