override
的新语法允许编译器报告错误,如果它没有真正覆盖虚拟函数N3206的话。
class Base {
virtual void vfunc();
void afunc();
};
如Std示例中所述,以下情况将是
class Derived : public Base
中的错误:void vfunk() override; // err: typo
void vfunc(int) override; // err: argument
void vfunc() const override; // err: cv
但是,如果基本方法是而不是虚拟怎么办?
void afunk() override; // ?
void afunc(int) override; // ?
void afunc() const override // ?;
最佳答案
规范草案(n3242)说
由于您显示的函数声明不是虚拟的,因此您也会
请注意,具有与基本函数相同的名称和参数列表(包括常数)但不是虚拟函数的函数不会覆盖该基本函数。据说它隐藏了基本功能。
通过在函数的声明是C++ 0x草案的一部分之后放置new
而不是override
来指定函数隐藏基本函数,但不会成为C++ 0x的一部分,因为查找非函数的语法点存在问题及时放置new
的成员。因此,它被选为C++ 0x。
关于c++ - 如何重写非虚拟功能?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/5530022/