首页 > 解决方案 > 继承、覆盖和虚函数,避免重复代码

问题描述

我有三个类,A、B 和 C。B 和 C 是从 A 派生的。B 和 C 都需要实现一个方法F。BF() 中的代码是 CF() 的子集。

  1. A.F()声明为虚函数并定义B.F()and是一种好方法C.F()吗?两种方法中会有相同的代码,我想避免。其他的可能性是什么?
  2. 使用通用代码定义A.F()并在C.F(). 在重写的同时,AF() 的输出如何在 CF() 中使用,从而避免重复代码?

标签: c++inheritancevirtual-functions

解决方案


  1. 我想这不是最好的做法。如果您可以避免代码重写 - 当然,请这样做。

  2. 正如您所说,最好使用and的公共代码定义F()in ,然后使用call in 覆盖函数覆盖它。我的意思是,有了这个,你可以先执行父方法,然后再使用新的额外逻辑。如果您继承自,那么您根本不应该为这种方法而烦恼。ABCC.F()A::F()A.F()BAB

请注意,从这个角度来看,顺序很重要。如果您希望首先执行父代码,请A::F()在您的附加逻辑之前调用。不过,选择什么顺序由您决定。

编辑

如果您不知道如何在子方法中调用父方法代码,我将为您添加一个带有很好示例的链接。看一看,玩得开心。


推荐阅读