C ++
它说的C ++ 11 FDIS
如果一个虚函数用virt-specifier覆盖来标记,并且不覆盖基类的成员函数,那么这个程序是不合格的。 [例如:
struct B {
virtual void f(int);
};
struct D : B {
void f(long) override; // error: wrong signature overriding B::f
void f(int) override; // OK
};
如果B::f
不会被标记为虚拟? 那么该计划是否构成不良? 或者被override
然后被忽略。 我在std文本中找不到任何这种情况的处理。
更新1/2 (合并)我将请求转发给C ++编辑器以查看事情。 感谢Johannes指出这一点。
但通过实现这一点,我发现,无法满足“覆盖”上下文关键字的意图:如果函数名称中的拼写错误或错误的参数类型确实使函数本身不是虚拟的,则标准文本将不会应用 - - 和“覆盖”是无用的。
最好的解决方案可能是
如果B::f
不会被标记为虚拟? 那么该计划是否构成不良?
是的。 因为为了覆盖某些东西,这个东西必须是虚拟的。 否则它不是压倒性的 ,它隐藏着 。 所以,你的问题中引用的正面答案如下。
如果B:f
是非虚拟的,那么这两个 D:f
函数都会不合格。
是的,当override
被添加到任何非虚函数时,程序生病了。
通常,具有不同签名(重载)的函数与具有不同名称的函数不同。 规范中给出的示例并不意味着函数名称效果override
。 它意在显示override
旨在防止的常见错误。
上一篇: c++
下一篇: Angularjs SEO: is making html snapshots required anymore?