覆盖基类返回类型

时间:2012-10-14 01:29:28

标签: c++ sdl

我有一个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以便在其他类中做其他事情。

2 个答案:

答案 0 :(得分: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); }; 方法,并且可以在参考

{{1}}

答案 1 :(得分:0)

你可以做点什么但是很难看:

mybutton.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);
};

mybutton.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.
}

的main.cpp

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

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