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的函数,用不同的名称调用它。
使用此函数重写虚拟函数,但不返回其值。如果需要具有不同签名的函数,则缺少继承的语义。换个名字吧。我该怎么处理原始签名呢?我只是让它为空?没有必要重写它,如果不声明它,将使用父类的类方法。也许你可以给出一点你想做什么的背景。