C++ 有空实体的虚拟方法与纯虚拟方法有什么区别?

C++ 有空实体的虚拟方法与纯虚拟方法有什么区别?,c++,C++,我最近在看一个游戏的源代码。该设计声明了一个“抽象”场景类,其他类型的场景(如MenuScene的PlaySecene)从该类继承。场景类在头中声明,其所有方法都是虚拟的。但是,在检查该类的源代码时,所有这些方法都作为空体实现。这只是一段糟糕的代码,还是有什么理由不将这些方法声明为纯虚拟方法?纯虚拟方法会使类变得“抽象”,因此无法实例化它。空的虚拟方法将允许实例化类 这只是一段糟糕的代码,还是有什么理由不将这些方法声明为纯虚拟的 不知道,听起来像是坏代码。除非您希望基类在从继承时提供“null”

我最近在看一个游戏的源代码。该设计声明了一个“抽象”场景类,其他类型的场景(如MenuScene的PlaySecene)从该类继承。场景类在头中声明,其所有方法都是虚拟的。但是,在检查该类的源代码时,所有这些方法都作为空体实现。这只是一段糟糕的代码,还是有什么理由不将这些方法声明为纯虚拟方法?

纯虚拟方法会使类变得“抽象”,因此无法实例化它。空的虚拟方法将允许实例化类

这只是一段糟糕的代码,还是有什么理由不将这些方法声明为纯虚拟的

不知道,听起来像是坏代码。除非您希望基类在从继承时提供“null”方法,否则当这些方法被用作行为扩展时,这并不是一种不寻常的做法


换句话说,如果您的语义是“扩展这个类并只重载您实际需要的功能”,那么它就很好了。当这些方法被视为钩子并在特定时刻被框架调用时,通常会使用这种方法。

为什么要实例化一个没有功能的类?@FlipFlop,这可能只是一个副作用。@FlipFlop以便以后可以用继承它的类替换它,但实际上是通过重写某些函数来实现的。@FlipFlop,当您想订阅某些内容,但只想对特定事件执行某些操作时。在这种情况下,将定义一些方法,但emtpy.@FlipFlop这称为空对象模式,它可用于测试基本代码结构是否正常,而不提供任何实际功能。