2016-07-22 128 views
2

我最近在看一个游戏的源代码。该设计声明了一个“抽象”场景类,其他类型的场景如MenuScene的PlayScene继承。 Scene类在所有方法都是虚拟的头中声明。但是,在检查此类的源代码时,所有这些方法都是作为空体执行的。这只是不好的代码,或者有什么理由不将这些方法声明为纯虚拟的?带空虚的虚拟方法和纯虚拟方法有什么区别?

回答

4

纯粹的虚拟方法会让你的类“抽象”,因此你将无法实例化它。一个空虚拟方法将允许你的类被实例化。

这是只是不好的代码,或者有一些原因,为什么不会将这些方法声明为纯虚拟?

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

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

+0

你为什么要实例化一个没有功能的类? – FlipFlop

+0

@FlipFlop这可能只是一个副作用。 – Shoe

+0

@FlipFlop所以你可以稍后用一个继承它的方法替代它,但实际上通过覆盖一些函数来实现。 – Quentin