虚拟功能可以被非虚函数覆盖吗?

Eri*_*ric 6 c++ overriding virtual-functions c++11

在这段代码中:

class Base {
public:
    virtual void method() = 0;
};

class Derived1 : public Base{
public:
    virtual void method() override { }
};

class Derived2 : public Base{
public:
    void method() override { }
};
Run Code Online (Sandbox Code Playgroud)

有什么区别Derived1和Derived2?

hmj*_*mjd 16

从第10.3节c ++ 11标准的虚函数(草案n3337)第2点:

如果虚拟成员函数vf在类Base和Derived类中声明,直接或间接从Base派生,则具有相同名称的成员函数vf,parameter-type-list(8.3.5),cv-qualification和声明了Base :: vf的refqualifier(或不存在),然后Derived :: vf也是虚拟的(无论是否声明)并且它覆盖Base :: vf.

所以Derived2::method也virtual,即使它没有明确宣布为.

  • 使用C++ 11,可以使用override关键字来指示派生类中的函数是虚拟的. (4认同)