gpt4 book ai didi

c++ - 专注于 C++ 中的两个祖先类

转载 作者:行者123 更新时间:2023-11-28 06:48:48 25 4
gpt4 key购买 nike

我定义了一个由三个类组成的抽象接口(interface):

class rendering_context {…}
class window : public rendering_context {…}
class offscreen : public rendering_context {…}

这允许各种客户端对象忽略它们所处的渲染上下文类型。到目前为止一切顺利。

然后我定义了具体的实现:

class sdl::window : public window {…}
class sdl::offscreen : public offscreen {…}

这一切都按预期工作,客户端类很高兴不知道它们是在屏幕上/屏幕外/基于 SDL 的。

我的困惑:

我现在拥有适用于所有渲染上下文的 SDL 特定功能,即不仅适用于 sdl::window 中的一个或另一个或 sdl::offscreen .

这表明一类 sdl::rendering_context需要在某处拉出,但如何将其放入类层次结构中?

如果我像这样创建具体类:

class sdl::window : public window, public sdl::rendering_context {…}
class sdl::offscreen : public offscreen, public sdl::rendering_context {…}

假设sdl::rendering_context继承自 rendering_context那我不是继承了rendering_context吗隐含两次?事实是rendering_context ,在这种情况下,是一个抽象基类,没有成员和几个纯虚函数,这样可以吗?

这和菱形继承(钻石问题)一样吗?看起来可能是这样,但区别在于调用哪个基类方法没有歧义:它们是纯虚拟的,并且在实践中肯定会执行层次结构底部的具体实现。

[注意我的类声明实际上没有一个像上面那样,这只是为了说明层次结构。当前代码可以编译和工作,它只是复制了一些功能。]

最佳答案

And assuming sdl::rendering_context inherits from rendering_context then haven’t I inherited from rendering_context twice implicitly?

如果这是个问题,您可以考虑 virtual inheritance ,其中 rendering_context 是一个共享基类。如果你想这样做:

class window : public virtual rendering_context {...}
class offscreen : public virtual rendering_context {...}

关于c++ - 专注于 C++ 中的两个祖先类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24457024/

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