继承、覆盖和虚函数,以避免重复代码

Inheritance, overriding, and virtual functions to avoid repeated code

本文关键字:代码 覆盖 函数 继承      更新时间:2023-10-16

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

  1. A.F()声明为虚函数并定义B.F()C.F()是否是一种好方法?我想避免在 2 种方法中使用相同的代码。其他是什么 可能性?
  2. 使用通用代码定义A.F()并在C.F()中覆盖它。在覆盖时,如何在 C.F(( 中使用 A.F(( 的输出,从而避免重复的代码?
我想
  1. 这不是最好的选择。如果你可以避免代码重写 - 当然,这样做。

  2. 正如您所说,最好在A中定义F(),使用BC的通用代码,然后在C.F()中使用A::F()在 overriden 函数中使用调用来覆盖它。我的意思是,有了这个,您可以首先执行父方法A.F(),然后使用新的额外逻辑。如果你从A继承B,那么你根本不应该在B中为这种方法而烦恼。

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

编辑

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