2012-10-14 73 views
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以便在其他类中做其他事情。

+1

如果你需要一个具有不同签名的函数,那么你就错过了继承的语义。只是称它为另一个名字。 – imreal

+0

我该如何处理原始签名?我只是把它留空了? –

+0

没有必要重写它,如果你不声明它,将使用父类的方法。也许你可以提供一些关于你想要做什么的背景。 – imreal

回答

2

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

这意味着,如果你想有一个返回一个整数,你可以用一个整数参考参数overloadMyButtonhandleEvent方法,你可以在基准设置它的值的方法。

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);   
}; 
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的全新函数,并以不同的名称调用它。 用此替代虚函数而不返回它的值。