覆盖C ++ 2011中的非虚函数

如果没有真正覆盖虚函数N3206,
override
的新语法允许编译器报告错误。
class Base {
    virtual void vfunc();
    void afunc();
};
如标准示例中所述,以下情况将是
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)说   如果使用virt-speci fi er覆盖标记虚函数并且不覆盖基类的成员函数,则该程序格式错误。 由于您显示的函数声明不是虚拟的,因此您也会遇到异常   virt-specifier-seq最多应包含每个virt-specifier中的一个。 virt-specifiers override和final只出现在虚拟成员函数的声明中。 请注意,具有相同名称和参数列表(包括constness)作为基本函数但不是虚拟的函数不会覆盖该基函数。相反,它被称为隐藏基本功能。 通过在函数声明之后放置
new
而不是
override
来指定函数隐藏基函数是C ++ 0x草案的一部分,但是不会成为C ++ 0x的一部分,因为找到非函数的语法点有问题及时将
new
放入的成员。因此,它被投票支持C ++ 0x。     

要回复问题请先登录注册