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

C+中的继承+;多类问题 只是一个关于C++中继承的非常简单的问题。,c++,inheritance,C++,Inheritance,假设我有几节课 类A继承自类B和类C 我想让类D从类A继承,但类C的功能破坏了我的代码 当我从类D中的类A继承时,是否可能以某种方式排除类C 编辑: @昆廷 我使用的是SFML,类A继承自sf::NonCopyable类。类A是场景节点类,游戏世界中所有实体/对象的层次结构都基于该类。我正在创建一个“TileEngine”类,该类生成“TileLayer”对象的实例,我希望TileLayer从SceneNode继承,这样我就可以通过层次结构将绘图调用传递给它们,但由于它们不可复制,我无法将它们放

假设我有几节课

类A继承自类B和类C


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

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

编辑:

@昆廷

我使用的是SFML,类A继承自sf::NonCopyable类。类A是场景节点类,游戏世界中所有实体/对象的层次结构都基于该类。我正在创建一个“TileEngine”类,该类生成“TileLayer”对象的实例,我希望TileLayer从SceneNode继承,这样我就可以通过层次结构将绘图调用传递给它们,但由于它们不可复制,我无法将它们放入容器中,并在TileEngine类中对它们进行迭代

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

我只是好奇我所问的是否可行,因为这是一个简单的解决方案,而且我还不知道使用继承的所有细节,所以尽管看起来不太可能,我还是决定检查一下。谢谢回复,我想我可以自己修改代码。

没有

你的
A
既是
B
又是
C

如果
D
不能是
C
,那么它也不能是
a

也许用构图代替


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

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

您的
sceneode
是否可以移动?移动语义的实现通常比复制语义简单,标准容器对仅可移动的值非常满意。但即使在那种情况下

您的
SceneNode
是否可以改为一个简单的界面?您只提到能够调用绘图函数。这听起来与任何复制业务都不相关,因此可能您只需要一个带有纯虚拟
draw
功能的界面。否则

如果您真的不能改变这些需求(在这一点上我会感到惊讶,但让我们假装一下),您可以简单地使用
std::unique\u ptr
的容器。这些文件不需要来自指针的任何内容,可以随意存储在容器中

然后还有一整批技术可以适合你的情况。别忘了OOP和继承只是破解这一缺陷的一种方法,但是C++提供了更多的工具和技术。但首先,让它发挥作用:)

你的
A
既是
B
又是
C

如果
D
不能是
C
,那么它也不能是
a

也许用构图代替


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

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

您的
sceneode
是否可以移动?移动语义的实现通常比复制语义简单,标准容器对仅可移动的值非常满意。但即使在那种情况下

您的
SceneNode
是否可以改为一个简单的界面?您只提到能够调用绘图函数。这听起来与任何复制业务都不相关,因此可能您只需要一个带有纯虚拟
draw
功能的界面。否则

如果您真的不能改变这些需求(在这一点上我会感到惊讶,但让我们假装一下),您可以简单地使用
std::unique\u ptr
的容器。这些文件不需要来自指针的任何内容,可以随意存储在容器中


然后还有一整批技术可以适合你的情况。别忘了OOP和继承只是破解这一缺陷的一种方法,但是C++提供了更多的工具和技术。但首先,让它工作:)

不要用文字描述代码,而是展示它!请尝试创建一个演示给我们看。遗憾的是,我不认为我可以使用这些指导线创建一个示例。这些类是我为2D游戏构建的框架的一部分。给我一点时间,我至少会发布构造函数和它们的描述functionality@fishyperil这是关于用C++代码替换“代码> < <代码> >代码> b>代码>代码> >代码>代码>代码> d>代码>。我很好奇
C
如何“破坏”
D
,如果你也能重现这一点,那就太好了:)“C类的功能正在破坏我的代码”这是一个非常重要的语句,你能展示到底发生了什么吗?@fishypril:即使编辑之后,我仍然看不到代码。我知道将问题浓缩到一个最小的例子需要一些时间,但请这样做。与其用文字描述代码,不如展示它!请尝试创建一个演示给我们看。遗憾的是,我不认为我可以使用这些指导线创建一个示例。这些类是我为2D游戏构建的框架的一部分。给我一点时间,我至少会发布构造函数和它们的描述functionality@fish