我可以这样做吗?
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
包含两个函数定义。一种实现,一种没有实现。