我有一个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
以便在其他类中做其他事情。
答案 0 :(得分:2)
毕竟继承的概念MyButton
是Button
的一个实例。这意味着您已经在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的全新函数,使用不同的名称调用它。 用这个覆盖虚函数而不返回它的值。