c++ - 使用多重继承时如何避免死亡钻石?

标签 c++ multiple-inheritance

http://en.wikipedia.org/wiki/Diamond_problem

我知道这意味着什么,但我可以采取哪些措施来避免它?

最佳答案

一个实际的例子:

class A {};
class B : public A {};
class C : public A {};
class D : public B, public C {};

请注意 D 类如何从 B 和 C 继承。但 B 和 C 都从 A 继承。这将导致 A 类的 2 个拷贝包含在 vtable 中。

为了解决这个问题,我们需要虚拟继承。需要虚拟继承的是 A 类。因此,这将解决问题:

class A {};
class B : virtual public A {};
class C : virtual public A {};
class D : public B, public C {};

关于c++ - 使用多重继承时如何避免死亡钻石?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/137282/

相关文章:

c++二维数组问题

python - 在 C++ 中使用 jinja2 时的无效结果

c++ - 可以自动生成hpp或h文件吗?

java - 使用泛型类型扩展类,java

c++ - 混合基类的虚拟和非虚拟继承

C++类识别题

c++ - 我可以用 null 初始化一个迭代器,如果不能,为什么?

python - Python C API 中的多重继承

java - 如何创建多 war war 模块?

c++ - gzstream lib打开不存在的文件