C++覆盖功能
C++ overriding function
我已经尝试解决这个问题好几天了,但没有任何运气。
我试图覆盖一个函数。这是父类的标头:
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 方法,请将其设为虚拟。
相关文章:
- C++中"覆盖功能的异常规范比基本版本更宽松"的奇怪错误
- 矢量被push_back功能覆盖
- 为什么我无法覆盖虚拟功能?
- 是否可以在 C++03 中实现类似"覆盖"的功能
- 覆盖私有功能,它与受保护功能有何不同?
- 带有抽象类的覆盖模板功能
- 覆盖私人功能
- C++继承 - 覆盖功能,包括使用 "::" s、.h 文件和.cpp文件
- C++向下转换以撤消功能覆盖
- 每个实例C 的覆盖功能
- SVML的覆盖功能调用
- 如何在标题文件中获取成员功能的正确代码覆盖范围
- C 从同一基本模板类覆盖功能,具有多个继承模棱两可的函数调用
- 是否有可能覆盖全局实现的功能
- variadic模板和功能覆盖
- 需要有关多个继承和可选功能覆盖C 的建议
- 我想我将名称隐藏与功能覆盖混淆了
- 虚拟功能覆盖和隐藏
- 纯虚拟功能覆盖
- 将私有功能覆盖给公共功能的潜在危险是什么?