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/

    10-14 14:26