@AleksG0

C++ собственный обработчик событий для отдельного экземпляра класса?

Доброго времени суток.
Начинаю программировать на С++, понадобилось сделать разные обработчики у разных объектов для события одного типа, что-то вроде "onClick".

Что то вроде этого на "pascale" (в Delphi7):
{ Создание объекта }
Button:=TButton.Create(Form1);
{Обработчик событий}
procedure Button1Click;
begin
end;
{ Привязка обработчика }
Button.OnClick:=Button1Click;


Возможно ли такое сделать на С++, чтобы в нутри функции можно было использовать поля объекта?

Сделал пока так

class TButton{
public:
void (*onClick)(void);
};
/* обработчик - простая функция (без доступа к полям объекта) */
void onClick1(void){
	// что-то
}

TButton *b = new TButton();
b->onClick = onClick1;
b->onClick();// Вызов
  • Вопрос задан
  • 262 просмотра
Решения вопроса 1
@res2001
Developer, ex-admin
Обычно подобное делают через наследование, а не сохранение указателей на функции. Тогда вы будете иметь из методов полный доступ к членам класса.
Т.е. вы имеете базовый класс TButton с виртуальной функцией onClick. Делаете собственный класс, родителем которого является TButton, переопределяете onClick. Профит.
Так устроены многие GUI библиотеки типа Qt, MFC и т.п.
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 1
@AleksG0 Автор вопроса
Правильно я вас понял?
class TButton {
public:
    virtual void onClick(void)=0;
};

class TButton1 : public TButton {
public:
    void onClick(void);
};

void TButton1::onClick(void){
    cout<<"click to button1";
}

int main()
{
    TButton *btn = new TButton1(); 
    btn->onClick();
    return 0;
}
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы