虚拟方法与空体和纯虚方法有什么区别?

时间:2016-07-22 14:23:59

标签: c++

我最近在查看游戏的源代码。该设计声明了一个“抽象”Scene类,其他类型的Scene(如MenuScene的PlayScene)继承该类。 Scene类在标头中声明,其所有方法都是虚拟的。但是,在检查此类的源代码时,所有这些方法都实现为空体。这只是错误的代码还是有一些原因导致人们不会将这些方法声明为纯虚拟的?

1 个答案:

答案 0 :(得分:4)

一个纯粹的虚拟方法将使你的班级"抽象"因此你无法实例化它。一个空的虚方法将允许您的类被实例化。

  

这只是错误的代码还是有一些原因导致人们不会将这些方法声明为纯虚拟?

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

换句话说,如果你的语义是"扩展这个类并且只重载你实际需要的功能"然后它完全没问题。当这些方法被视为 hooks 并在框架的特定时刻调用时,通常会使用此方法。