Переопределить метод при создании объекта в Arduino / C ++ - PullRequest
0 голосов
/ 09 марта 2020

Я работаю над эскизом arduino для OLED-дисплея, который создает кнопки, которые должны выполнять разные действия при нажатии на них. В Java я могу просто переопределить метод при создании объекта (я не знаю, как вы это называете) следующим образом:

new exampleClass() {
            @Override
            void method() {
                super.method();
            }
};

И класс:

public class exampleClass {
    void method() {

    }
}

Так Вопрос в том, могу ли я сделать это в наброске Arduino?

1 Ответ

0 голосов
/ 09 марта 2020

Поскольку Arduino Sketch на самом деле является C / C ++, вы можете сделать то же самое, что и в Java.

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

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

Обратите внимание на ключевое слово virtual, оно используется для объявления метода, который можно переопределить, "= 0 "означает чисто виртуальный (адрес метода равен 0). Это просто говорит о том, что этот метод не реализован в этом классе, класс стал abstract как в Java.

Кроме того, ключевое слово virtual не является обязательным, но если вы его не поставите, C ++ будет просто вызывать метод данного типа, а не из реального типа.

Взгляните там

Но разница с Java в том, что вы не можете создать анонимный класс непосредственно в коде. Вместо этого, возможно, взгляните на лямбду.

Например, класс Button будет выглядеть так:

class Button {
   public:
      Button(const std::function<void()> &pushCallback) :
         mPushCallback(pushCallback) {}

      void push() { mPushCallback(); }
   private:
      const std::function<void()> mPushCallback;

А затем использование:

Button powerButton([]() {
   powerOff();
});
  • Скобки используются для «захвата» переменной, например: & str {myMethodInMyClass (str); }
  • Скобки используются для передачи параметров
  • Класс std :: function принимает тип функции в качестве параметра типа, функцию, которая принимает строку как const ref и int, и которая возвращает int будет выглядеть так: std::function<int(const std::string &, int)>
...