tow*_*owi 6 c++ virtual overriding c++11
override如果没有真正覆盖虚函数N3206,那么新的语法允许让编译器报告错误.
class Base {
virtual void vfunc();
void afunc();
};
Run Code Online (Sandbox Code Playgroud)
如class Derived : public Base标准示例中所述,以下情况将是错误:
void vfunk() override; // err: typovoid vfunc(int) override; // err: argumentvoid vfunc() const override; // err: cv 但是如果基本方法不是虚拟的呢?
void afunk() override; // ?void afunc(int) override; // ?void afunc() const override // ?;Joh*_*itb 11
规范草案(n3242)说
如果使用virt-speci fi er覆盖标记虚函数并且不覆盖基类的成员函数,则该程序格式错误.
由于您显示的函数声明不是虚拟的,因此您也会遇到异常
virt-specifier-seq最多应包含每个virt-specifier中的一个.virt-specifiers override和final只出现在虚拟成员函数的声明中.
请注意,具有相同名称和参数列表(包括constness)作为基本函数但不是虚拟的函数不会覆盖该基函数.相反,它被称为隐藏基本功能.
指定一个函数隐藏一个基函数,new而不是override在函数声明之后是C++ 0x草案的一部分,但不会成为C++ 0x的一部分,因为找到非函数成员的语法点有问题new及时投入.因此,它被投票支持C++ 0x.