Passing class-member function to another class

roys1:
In my code below, I'd like to pass the HeatTapeClass::turnOn and HeatTapeClass::TurnOff functions to Alarm.alarmRepeat, but can not seem to do so. I've tried many variations including &HeatTape::turnOn without success.

The canonical way to do this is to create an interface, and then pass a pointer to that interface.

class OnOffInterface
{
public:
  virtual void turnOn(void) =0;
  virtual void turnOff(void) =0;
};

class HeatTapeClass: public OnOffInterface
{
public:
  virtual void turnOn(void)
  {
    Serial.println("I'm on :)");
  }
  virtual void turnOff(void);
  {
    Serial.println("I'm off :(");
  }
};

class AlarmClass
{
public:
  void alarmRepeat(OnOffInterface* p)
  {
    p->turnOn();
    delay(1000);
    p->turnOff();
  }
}

void setup(void)
{
  HeatTapeClass myHeatTape;
  AlarmClass Alarm;

  Alarm.alarmRepeat(&myHeatTape);
}