Как правильно создать класс

На всякий случай тут оставлю, вдруг кому пригодится

typedef void (*ButtonPush)(void); // тип - указатель для Callback-функции

class Button {
public:
  virtual void push() = 0;
};

class PowerButton : public Button {
public:
  void push() override {
    shutdown();
  }
};

class OnButton : public Button {
public:
  void push() override {
    ondown();
  }
};

class TButton {
public:
  TButton(ButtonPush callback) {
      _callback = callback;
    }
    void push() {
      _callback();
    }
private:
    ButtonPush _callback = nullptr;    
};


void shutdown() {
  Serial.println("shutdown");
}

void ondown() {
  Serial.println("ondown");
}

void CreateDevices() {
  PowerButton Button1;
  Button1.push();

  OnButton Button2;
  Button2.push();

  TButton Button3(shutdown);
  Button3.push();
  TButton Button4(ondown);
  Button4.push();
}
1 лайк

If (_callback) { _callback(); }

Он, конечно, по сути не используется в данной реализации, но лучше так.

Нет…