C ++重写函数

时间:2013-06-09 20:02:47

标签: c++ function polymorphism virtual

我试图解决这个问题已经好几天没有运气了。

我试图覆盖一个功能。这是父类的标题:

class DComponent{
public:
virtual void mouseDown(int button, int x,int y){}
};

儿童班的标题:

class DButton:public DComponent{
public:
void mouseDown(int button,int x, int y);
};

孩子的cpp:

#include "DButton.h"
void DComponent::mouseDown(int button, int x,int y){
}

我得到了这个错误:

    1>c:\users\daffern\documents\visual studio 2012\projects\spel\spel\dbutton.cpp(26): error C2084: function 'void DComponent::mouseDown(int,int,int)' already has a body
1>          c:\users\daffern\documents\visual studio 2012\projects\spel\spel\dcomponent.h(13) : see previous definition of 'mouseDown'

我还试图不定义虚函数,但后来我得到了链接错误。

非常感谢任何帮助!

2 个答案:

答案 0 :(得分:3)

在头文件中定义方法,然后在源文件中重新定义它。

您应该为DButton类定义它:

void DButton::mouseDown(int button, int x,int y){
}

另外,我建议您使用

使DComponent方法成为纯虚方法
virtual void mouseDown(int button, int x,int y) = 0;

答案 1 :(得分:0)

#include <iostream>

class DComponent{
public:
virtual void mouseDown(int button, int x,int y){
    std::cout << "Parent\n";
}
};


class DButton:public DComponent{
public:
void mouseDown(int button,int x, int y){
    std::cout << "Child\n";
}
};

int main(){
    DComponent parent;
    DButton child;

    parent.mouseDown(0,0,0);
    child.mouseDown(0,0,0);
    return 0;
}

将打印

  

父   子

如果您不想为父类指定函数,请记住将其设为纯虚拟

virtual void mouseDown(int button, int x,int y) = 0;

如果你想覆盖DButton方法,则将其设为虚拟。