在这段代码中:
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
吗?
在这段代码中:
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
吗?
从第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
,即使它没有明确声明为这样。
它们是相同的。
virtual
在实际覆盖函数时是可选的。仅当在基类中标记函数时它是强制性的。