我是否偶然使用多态来(可能)递归地定义一个类?

时间:2014-02-13 23:59:52

标签: c++ recursion polymorphism sfml heisenbug

我正在开发我的第一个非常重要的C ++游戏,而且我已经和奇怪的Heisenbugs打了几天了。这对我来说并不是很有趣,因为它不符合逻辑。 (至少不适合我,因为当谈到更深奥,更低级别的东西时,我并不是所有的核心。)这是非常令人沮丧的,因为可以通过放置任意window.draw()来修复某些错误。 std::cout来电。我认为问题是悬挂指针,它仍然可能,但我想我清除了这些。现在,问题在于,当我将鼠标触摸到屏幕顶部时,实体认为它们会死亡,尽管没有代码告诉他们这样做。 (事实上​​,没有与鼠标位置远程相关的代码,y = 0.)无论如何......

我认为我已经将问题(或至少一个问题)缩小到一行代码,我想我可以通过稍微改变架构来解决这个问题。但我希望这是一次学习经历,我不知道为什么会这样。这就是我认为正在进行的事情。

我有一个带有Soldier子类的GameEntity超类,它也是一个Launcher(它什么都没有继承)。我认为这个多重继承是问题的一部分,因为Launcher类有一个带GameEntity参数的启动方法。因此,我认为如果GameEntity传入方法一个启动器,则可以递归调用启动方法。我刚刚意识到这可能发生在某一点,因为游戏在发射方法中冻结了。基本上,我想知道由于多态和多重继承而导致递归的可能性是否会导致奇怪的问题,以及原因。在我知道自己在做什么之前,我会对多态性和指针更加保守。

真的,任何建议都会非常有用。谢谢!

1 个答案:

答案 0 :(得分:0)

听起来你有一个挑战,明确定义你的课程的责任和合作。继承选择应遵循设计中发现的这些关系。

您可以添加一个字段以进行调试,launchable并检查您的Launcher是否仅启动可启动的内容。还要检查您的Launcher对象本身是否无法启动。作为副作用,这会阻止您自己启动。