C++覆盖功能

C++ overriding function

本文关键字:功能 覆盖 C++      更新时间:2023-10-16

我已经尝试解决这个问题好几天了,但没有任何运气。

我试图覆盖一个函数。这是父类的标头:

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:usersdafferndocumentsvisual studio 2012projectsspelspeldbutton.cpp(26): error C2084: function 'void DComponent::mouseDown(int,int,int)' already has a body
1>          c:usersdafferndocumentsvisual studio 2012projectsspelspeldcomponent.h(13) : see previous definition of 'mouseDown'

我也尝试不定义虚拟函数,但随后出现链接错误。

任何帮助将不胜感激!

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

您应该改为为 DButton 类定义它:

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

另外,我建议您使用

virtual void mouseDown(int button, int x,int y) = 0;
#include <iostream>
class DComponent{
public:
virtual void mouseDown(int button, int x,int y){
    std::cout << "Parentn";
}
};

class DButton:public DComponent{
public:
void mouseDown(int button,int x, int y){
    std::cout << "Childn";
}
};
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 方法,请将其设为虚拟。