一次覆盖两个方法

Max*_*xym 4 c++ standards standards-compliance c++11

下面的代码令人惊讶地编译在VS 2012中.

方法C :: f()覆盖两个基类中的方法.

这是标准行为吗?我查看了C++ 11标准,并没有发现任何明确提到这种情况.

class A { virtual void f() = 0; };

class B { virtual void f() = 0; };

class C : public A, public B { 
  virtual void f() override { } 
};
Run Code Online (Sandbox Code Playgroud)

Mik*_*our 7

是.标准说,在C++ 11 10.3/2中

如果vf在一个类Base和一个类中声明一个虚拟成员函数Derived,直接或间接地从Base派生,一个vf与声明的名称[等]相同的成员函数Base::vf,则覆盖Base::vf.

多个基类没有特殊情况,因此在派生类中声明的函数将覆盖所有基类中的合适函数.