这个例子是在 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 {};
问题在于 B
中 aFoo()
的实施以及 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
包含两个函数定义。一个实现了,一个没有实现。
我可以这样做吗?
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 {};
问题在于 B
中 aFoo()
的实施以及 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
包含两个函数定义。一个实现了,一个没有实现。