gpt4 book ai didi

c++ - C++中的虚拟与非虚拟多重继承

转载 作者:行者123 更新时间:2023-11-27 23:24:45 25 4
gpt4 key购买 nike

我目前正在尝试掌握 C++ 中多重虚拟/非虚拟继承的概念。如果我正确理解 B 类和 C 类实际上从 A 类继承,它们共享一种单例对象,即它们都访问一个公共(public)对象 A 的相同字段。多重继承将为任何 B 和 C 对象创建单独的 A 对象。

考虑到以上情况,有人会如此友善并在简单实用的上下文中介绍它吗?为什么首先是多重继承,然后是虚拟/非虚拟?

谢谢。

最佳答案

多重继承并不常见used in C++ .在大多数情况下,它是接口(interface)/实现的混合体。这也不被禁止。对(虚拟)多重继承的需求来自于从一个通用基类派生的设计决策:

class Window 
{ /* draw, show, hide, background ... */ };

class WindowWithBorder : public virtual Window
{ /* methods to manipulate / draw border ... */ };

class WindowWithMenu : public virtual Window
{ /* methods to manipulate / draw Menu ... */ };

class MyWindow : public WindowWithBorder, public WindowWithMenu
{ /* now it's your turn ... */ };

库实现者必须预见到那些菱形继承图。如果没有 virtual,将有两个基本 Window 对象,如果有 virtual,它只有一个,但不是单例,因为可以有多个窗口。

图书馆通常(但不是在所有情况下)avoid这种情况,例如通过实现 composite design pattern ,具有“胖”基类,通过实现抽象接口(interface)类,或通过使用具有特征/策略的模板。

我建议阅读 Bjarne Stroustrup 的 The C++ Programming language 中关于类层次结构的章节。 (第 3 版第 15 章,我借用了这个例子)。

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

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