Доброго времени суток!
Подскажите, как правильно создать класс, чтобы можно было переопределить какой-либо метод в экземпляре класса и возможно ли такое?
Условно хочу сделать что-то такое
class LED{
public:
LED(byte pin, uint16_t prd) {
_pin = pin;
_prd = prd;
pinMode(_pin, OUTPUT);
}
void blink() {
//функция в классе, которая должна быть определена при создании экземпляра класса
}
private:
byte _pin;
uint16_t _prd;
};
#include "LED.h"
LED led1(13, 500);
LED led2(12, 1000);
void led1.blink() {
// код функции для led1
}
void led2.blink() {
// код функции для led2
}
соответственно при вызове led1.blink() и led2.blink() вызывается разный код.
У тебя led1 и led2 - экземпляры одного класса, значить функция будет одна и та же. Решить это можно только наследованием с виртуальными функциями, или, что проще всего, указателем на функцию, которая должна выполниться для разных экземпляров одного класса. То есть, в классе ты определяешь не функцию, а член-указатель на функцию, потом присваиваешь ему что хочешь.
ну или по канонам создаешь общий класс, желательно абстрактный, с виртуальной функцией blink(). От него наследуешь два класса led1 и led2 и переопределяешь в них blink по-своему.
Указывают, что это функция. При вызове powerButton будет выполнен код, заключенный между фигурными скобками. Только не припоминаю в C++ слова function. В JS такие конструкции используются, а в плюсах не встречал
using PFCallback = void(*)(void); // pointer to function вида: void xxx(void);
// можешь даже кнопку передать, которая нажата
using PFCalbackButton = void(*)(const TButton &); // pointer to function вида: void xxx(const TButton &);
передаёшь в конструктор
TButton::TButton(PFCallback MyOwnFunc);
Запоминаешь во внутренней переменной - члене. Вызываешь по мере надобности. Можешь даже туда лямбду запхать, чтоб не плодить функций