gpt4 book ai didi

c++ - C++多类问题中的继承

转载 作者:行者123 更新时间:2023-11-27 23:48:56 26 4
gpt4 key购买 nike

只是一个关于 C++ 继承的非常简单的问题。

假设我有几门课。

A 类继承自 B 类和 C 类。

我想让 D 类继承自 A 类,但是 C 类的功能破坏了我的代码。

当我从 D 类中的 A 类继承时,是否有可能以某种方式排除 C 类?

编辑:

@昆汀

我正在使用 SFML,A 类继承自 sf::NonCopyable 类。 A 类是游戏世界中所有实体/对象的层次结构所基于的 SceneNode 类。我正在制作一个生成“TileLayer”对象实例的“TileEngine”类,我希望 TileLayers 从 SceneNode 继承,以便我可以通过层次结构将绘图调用传递给它们,但由于它们不可复制,我无法适应它们放入容器中并在 TileEngine 类中循环访问它们。

但我认为你是对的,它并没有真正破解代码。我想我只需要添加一些变量并想出一个簿记系统来让它工作。

我只是好奇我问的问题是否可行,因为这是一个简单的解决方案,而且我还不知道使用继承的所有来龙去脉,所以即使看起来不太可能,我还是决定检查一下。感谢您的回复,我想我可以自己调整代码。

最佳答案

没有。

你的 A 两者都是B和一个 C .
如果D不能是 C , 那么它就不能是 A要么。
也许改用组合?


根据您的具体情况进行更新:有几种方法可以解决这个问题。

首先,执行 SceneNode真的需要不可复制,如果是这样,为什么?如果这是一个纯粹的设计决定,那么现在很明显这是错误的决定,因为您现在需要一个可复制的 SceneNode。 .如果决定是技术性的(例如,存在难以正确克隆的簿记数据),您可以尝试解决该问题。否则...

你的SceneNode可以吗?可以移动吗?移动语义通常比复制语义更容易实现,并且标准容器对仅可移动的值非常满意。但即使在那种情况下......

你的SceneNode可以吗?是一个简单的界面吗?您只提到能够调用绘图函数。这听起来与任何复制业务无关,所以可能是一个带有纯虚拟接口(interface)的接口(interface) draw功能就是您所需要的。否则……

如果您真的无法满足这些要求(此时我会感到惊讶,但让我们假装),您可以简单地使用 std::unique_ptr<TileLayer> 的容器.这些不需要他们的受点者提供任何东西,并且可以随意存储在容器中。

然后还有一整套“另一批技术”可以适合您的情况。不要忘记 OOP 和继承只是解决这个问题的一种方法,但 C++ 提供了除此之外的更多工具和技术。但首先,让它工作:)

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

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