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

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

本文关键字:虚拟 继承 C++      更新时间:2024-05-10

我能这样做吗?

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 {};

问题在于aFoo()B中的实现和在C中的缺乏。当谈到编译时,我看到了这个错误:

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

难道不应该覆盖B中虚拟基类的纯虚拟方法吗?


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

您需要以这种方式进行虚拟继承:

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();
}

在我评论的欺骗中,你可以看到这种关系

A  
/   
B   C  
 /  
D 

用于虚拟继承和

A   A  
|   |
B   C  
 /  
D 

没有虚拟继承。

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