此示例在C ++中使用虚拟继承吗?

问题描述 投票:1回答:1

我可以这样做吗?

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中覆盖虚拟基类的纯虚方法?


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

c++ overriding multiple-inheritance virtual-functions virtual-inheritance
1个回答
1
投票

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

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包含两个函数定义。一种实现,一种没有实现。

© www.soinside.com 2019 - 2024. All rights reserved.