【发布时间】:2019-04-15 13:54:45
【问题描述】:
我正在研究虚函数和基类/虚类,似乎不会有在基类中使用虚函数而不是纯虚函数的场景。
【问题讨论】:
-
一种可能的情况是当您的基类提供该虚函数的默认实现时,即基类不是抽象的,您可以创建它的对象。
-
基类本身也可以是一个完全有效的对象。和功能,其中,可以通过继承进行扩展和覆盖。
-
有几种用例。如前所述,典型情况是可以由子类修改的默认行为(请注意,这包括由不同的开发人员使用您的代码作为库编写的子类,例如)。另一种是提供“扩展点”或回调。例如。考虑一个订单处理类,它可以有一个
on_order_complete方法,它什么都不做(但不是纯粹的),子类可以自定义。您甚至可以拥有充满空虚方法的类,允许自定义其行为的不同部分。 -
请注意,有时在基类中将函数定义为纯虚函数也是有意义的,但仍提供实现。这会强制派生类重新实现/覆盖该函数,但仍提供派生类可以在需要/需要时调用的基本实现。
-
不纯的虚函数很难正确记录。它们有它们的用途,但初学者可能一开始应该只编写纯虚函数。
标签: c++ virtual-functions pure-virtual