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

时间:2013-06-26 10:02:03

标签: c++ c++11 override virtual-functions

在此代码中:

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

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

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

Derived1Derived2之间有什么区别吗?

2 个答案:

答案 0 :(得分:16)

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

  

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

所以Derived2::method也是virtual,即使它未明确声明为此类。

答案 1 :(得分:4)

他们是完全相同的。

实际覆盖函数时,

virtual是可选的。仅在基类中标记函数时才是必需的。