【问题标题】:Is there any scenario where you'd want a virtual function instead of a pure virtual function?有没有你想要一个虚函数而不是纯虚函数的场景?
【发布时间】:2019-04-15 13:54:45
【问题描述】:

我正在研究虚函数和基类/虚类,似乎不会有在基类中使用虚函数而不是纯虚函数的场景。

【问题讨论】:

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

标签: c++ virtual-functions pure-virtual


【解决方案1】:

有时,基类具有默认行为,但您仍然可以通过在基类中将函数设为虚拟来更改该行为。

假设基类中有 10 个函数,它们都是虚函数。在您的派生类中,您只需要重写您想要的函数,无需重写所有 10 个函数。它使派生类的实现更容易。 - 你不需要重写所有 10 个函数。

【讨论】:

  • 它应该被添加到答案中,事实上如果你想覆盖它,你必须将方法标记为vritual。也许 OP 认为这是可选的,virtual 就像 Java 中的 abstract,但事实并非如此。
猜你喜欢
  • 2022-01-13
  • 2012-08-27
  • 1970-01-01
  • 1970-01-01
  • 2013-10-04
  • 2013-01-15
  • 1970-01-01
  • 2011-06-16
  • 1970-01-01
相关资源
最近更新 更多