6

在这段代码中:

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吗?

4

2 回答 2

16

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

如果在 Base 类和 Derived 类中声明了虚拟成员函数 vf,则直接或间接从 Base 派生,则具有相同名称、参数类型列表 (8.3.5)、cv-qualification 和声明了 Base::vf 的 refqualifier(或没有相同的),然后 Derived::vf 也是虚拟的(无论它是否如此声明)并且它覆盖 Base::vf。

Derived2::method也是如此virtual,即使它没有明确声明为这样。

于 2013-06-26T10:04:33.970 回答
4

它们是相同的。

virtual在实际覆盖函数时是可选的。仅当在基类中标记函数时它是强制性的。

于 2013-06-26T10:04:13.243 回答