具有相同纯虚函数的两个基类

Edv*_*yan 5 c++ inheritance virtual-functions

我有一个从类B继承的类A。所以类A的接口包含类B的一些纯虚函数和类A的一些函数。现在我需要为类A进行单元测试,所以想要一些接口我可以嘲笑的 A 类。所以现在我想知道给定的代码在 C++14 中是否正确,是否可以导致 UB:

class Base1 {
public:
  virtual void func() = 0;
};

class Base2 {
public:
  virtual void func() = 0;
};

class Derived : public Base1, public Base2 {
public:
  void func() override { }
};

int main() {
  Derived d;
  d.func();
  return 0;
}
Run Code Online (Sandbox Code Playgroud)

Wal*_*ter 4

是的,这段代码格式良好,并且void func()覆盖了A::func()B::func()。来自 C++14 标准:

[类.虚拟]

  1. 如果虚拟成员函数在 a和 a 中vf声明 ,直接或间接从 派生,则具有相同名称、参数类型列表 (8.3.5)、cv 限定符和 ref 限定符(或缺少与声明的相同) ,那么也是虚拟的(无论是否如此声明)并且它覆盖 .class Baseclass DerivedBasevfBase::vfDerived::vfBase::vf