Поскольку 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)>