Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/129.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 重写基类返回类型_C++_Sdl - Fatal编程技术网

C++ 重写基类返回类型

C++ 重写基类返回类型,c++,sdl,C++,Sdl,我有一个按钮类,如下所示: 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); }; 我有一种特殊的按钮,我的按钮: class MyButton : publi

我有一个按钮类,如下所示:

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);
};
我有一种特殊的按钮,我的按钮:

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
,以便在其他类中执行一些其他操作。

毕竟,继承的概念
MyButton
Button
的一个实例。这意味着您已经在
MyButton
中定义了一个
handleEvent
方法,并且我们不能使用具有相同名称和两种不同返回类型的方法

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

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

你可以做一些事情,但它是丑陋的:

我的按钮

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的函数,用不同的名称调用它。
使用此函数重写虚拟函数,但不返回其值。

如果需要具有不同签名的函数,则缺少继承的语义。换个名字吧。我该怎么处理原始签名呢?我只是让它为空?没有必要重写它,如果不声明它,将使用父类的类方法。也许你可以给出一点你想做什么的背景。