gpt4 book ai didi

c++ - 非 Diamond 类型中的虚拟继承

转载 作者:太空狗 更新时间:2023-10-29 20:59:46 25 4
gpt4 key购买 nike

当一个类继承自同一基类派生的 2 个类时,我无法理解为什么虚拟继承在我们没有遇到类似于菱形继承(钻石问题)的问题的情况下有用。

当它仍然有用(或什至需要)时,有人能给我一个例子或解释吗?

谢谢:)

最佳答案

当没有潜在的可能性时,虚拟继承并不是很有用 diamond shape inheritance problem .这个问题就是虚拟继承要解决的问题。以奇怪的对象布局和从大多数派生类调用最顶层的基初始化为代价。

虚继承最常见的实际应用是接口(interface)。

通过虚拟继承,您可以实现中使用 Java 技术。


在 C++03 中有虚拟继承的额外用例,基于从最派生类初始化最顶层类的需要的黑客攻击。

这些用例包括:

  • 使类不可继承。
    由 C++11 中的 final 解决。

  • 强制使用特定的最派生类(模板化)。
    在 C++11 中,协变功能(例如 clone 成员函数)可以更轻松地通过中间人继承添加,并带有 C++11 构造函数参数转发。

关于c++ - 非 Diamond 类型中的虚拟继承,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23860939/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com