1

我有一个 Button 类,如下所示:

class Button {    
    protected:
        SDL_Rect box;

    public:
        Button(string id, int x, int y, int w, int h);
        ~Button();
        virtual void handleEvent(SDL_Event event);
};

我有一种特殊的按钮,MyButton:

class MyButton : public Button {    
    public:
        MyButton(string id, int x, int y, int w, int h);
        ~MyButton();
        void handleEvent(SDL_Event event);          
};

问题是,我需要MyButton::handleEvent()返回的方法int而不是void. 最优雅的方法是什么?

编辑:我需要这个的原因是因为我需要知道什么时候MyButton被按下以便在其他类中做一些其他事情。

4

2 回答 2

2

毕竟继承的概念MyButtonButton. 这意味着您已经handleEvent定义了一个方法MyButton,我们不必使用具有相同名称和两种不同返回类型的方法。

这意味着如果您想要一个返回整数的方法,您可以overload在您的handleEvent方法中MyButton使用整数引用参数,并且您可以在引用中设置它的值。

class MyButton : public Button {    
    public:
        MyButton(string id, int x, int y, int w, int h);
        ~MyButton();
        void handleEvent(SDL_Event event, int& out_param);          
};
于 2012-10-14T01:41:53.673 回答
0

你可以做一些事情,但它很丑:

我的按钮.h

class MyButton : public Button {
    protected:
        SDL_Rect box;

    public:
        MyButton(string id, int x, int y, int w, int h);
        ~MyButton();
        void handleEvent(SDL_Event event);
        int handleEvent_int(SDL_Event event);
};

我的按钮.cpp

#include "mybutton.h"
void MyButton::handleEvent(SDL_Event event) {
    this->handleEvent_int(event);
}

int MyButton::handleEvent_int(SDL_Event event) {
    //Override it here but with return.
}

主文件

int main() {
    Button* button=new MyButton();
    button->handleEvent(...);
    MyButton* myButton=(MyButton*)button;
    int result=myButton->handleEvent_int(...);
}

您创建一个返回 int 的全新函数,用不同的名称调用它。用 this 覆盖虚函数而不返回它的值。

于 2012-10-14T01:49:20.107 回答