在此代码中:
class Base {
public:
virtual void method() = 0;
};
class Derived1 : public Base{
public:
virtual void method() override { }
};
class Derived2 : public Base{
public:
void method() override { }
};
Derived1
和Derived2
之间有什么区别吗?
答案 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
是可选的。仅在基类中标记函数时才是必需的。