这个例子是在 C++ 中使用虚拟继承吗?

Is this example working with virtual inheritance in C++?

我可以这样做吗?

class A {
public:
  virtual void aFoo() = 0;
};

class B : virtual public A {
public:
  virtual void aFoo() { ... }
};

class D : public A {};

class C : public B, virtual public D {};

问题在于 BaFoo() 的实施以及 C 中的缺失。在编译时我看到这个错误:

error: no unique final overrider for ‘virtual void A::aFoo()’ in ‘C’

难道不能覆盖 B 中虚拟基 class 的纯虚拟方法吗?


刚刚编辑示例以匹配实际用例。现在以这种简化的方式看它,我不太确定这是否可能,更不用说好的设计了。

你需要这样的虚拟继承:

struct A {
    virtual int f() = 0;
};
struct B : virtual A {
    int f() { return 1; }
};
struct C : virtual A {};
struct D : B, C {};

int main() {
    D d;
    return d.f();
}

在我评论的dupe中你可以看到这个关系

  A  
 / \  
B   C  
 \ /  
  D 

虚拟继承和

A   A  
|   |
B   C  
 \ /  
  D 

没有虚拟继承。

在第二种情况下 D 包含两个函数定义。一个实现了,一个没有实现。