【发布时间】:2018-01-15 18:06:28
【问题描述】:
我有一个基类 B,在 b.h 中我声明了虚函数 vf() 和常规函数 f()。
我有一个后代类 D,我希望在其中覆盖 vf()。我已经在 d.cpp 中实现了 vf()
我必须在 d.h 中声明 vf() 吗? (签名完全相同)
如果我不重写函数 f(),我是否还必须在 d.h 中重新声明 f()?
【问题讨论】:
-
简短的回答:是的。
-
您能解释一下原因吗?既然 vf 是在 B 中声明的,为什么后代必须为它想要覆盖的所有东西创建一个原型? (我也扩展了我的问题)
-
您是否正在寻找比“因为标准这么说”更深入的答案?
-
我问为什么,因为我得到了奇怪的编译器结果。我想我一定错过了一些概念。 (即如果已经声明,为什么要重新声明完全相同的东西)?但我想如果“因为标准这么说”是原因,那么可以
-
然后在此处发布“编译器结果”和导致它们的代码。你也不能覆盖
f(),因为它不是虚拟的。您只能引入具有相同名称的新功能,该功能将隐藏旧功能。
标签: c++ inheritance overriding