#include <iostream>
using namespace std;

class base
{
  public:
    typedef void (*interruptFunction) (void);//prototype
    virtual void Attach(interruptFunction foo)=0;
};

class derived: public base
{
  public:
    explicit derived(interruptFunction cb=nullptr);
    interruptFunction m_callback;
    void Attach(interruptFunction foo) override
    {
      m_callback=foo;
    }
};

void foo(void)
{
  cout<<endl<<"foo";
}

derived::derived(interruptFunction cb):base(),m_callback(cb){}


int main() 
{
  derived d(&foo);
  d.m_callback();
  //d.m_callback();

  cout << "\nHello, World!";
  return 0;
}
 
by