这个例子在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 {};
问题在于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
包含两个函数定义。一个实现了,一个没有实现。
相关文章:
- 大小虚拟继承中的派生类
- C++ 多级虚拟继承编译问题
- 如何正确获得虚拟继承?
- 避免C++虚拟继承
- 虚拟继承基构造函数消除
- 虚拟继承中是否存在多重继承?
- 了解虚拟继承类 vtables 和 vptr 创建
- 当键是虚拟继承中涉及的基类指针时,对 std::unordered_map 项的访问崩溃
- 我是否需要在虚拟继承类的构造函数中初始化基类以解决菱形继承问题?
- C++ 不明确访问 - 虚拟继承
- 虚拟继承中来自基数的虚拟调用
- 虚拟继承:调用没有匹配函数
- 虚拟继承的内部机制
- 联合虚拟继承
- C++虚拟继承类的大小
- C++虚拟继承、虚拟析构函数和 dynamic_cast<void*>
- 虚拟继承构造函数的组装
- 虚拟继承情况下类的意外大小
- 虚拟继承情况下的 vtable
- C++解决没有虚拟继承的钻石继承问题