继承、覆盖和虚函数以避免重复代码
Inheritance, overriding, and virtual functions to avoid repeated code
我有三个类,A,B,C。B和C都是从A派生出来的,B和C都需要实现一个方法F
。 B.F() 中的代码是 C.F() 的子集。
- 将
A.F()
声明为虚函数并定义B.F()
和C.F()
是否是一种好方法?两种方法中会有相同的代码,我想避免这种情况。还有哪些
可能性?
- 用通用代码定义
A.F()
并在C.F()
中覆盖它。在覆盖 A.F() 的输出时如何在 C.F() 中使用,从而避免重复代码?
我想这不是最好的做法。如果你能避免代码重写 - 当然,那就去做吧。
最好在A
中定义F()
,正如你所说的,B
和C
的公共代码],然后在 C.F()
中覆盖它,使用 A::F()
调用覆盖函数。我的意思是,有了这个,您可以先执行父方法 A.F()
,然后再执行新的额外逻辑。如果您从 A
继承 B
,那么您根本不应该为 B
中的这个方法操心。
请注意,从这个角度来看,顺序很重要。如果您希望首先执行父代码,请在附加逻辑之前调用 A::F()
。不过,由您决定选择什么顺序。
编辑
如果您不知道如何在子方法中调用父方法代码,我将为您添加一个 link 和一个很好的示例。看一看,玩得开心
我有三个类,A,B,C。B和C都是从A派生出来的,B和C都需要实现一个方法F
。 B.F() 中的代码是 C.F() 的子集。
- 将
A.F()
声明为虚函数并定义B.F()
和C.F()
是否是一种好方法?两种方法中会有相同的代码,我想避免这种情况。还有哪些 可能性? - 用通用代码定义
A.F()
并在C.F()
中覆盖它。在覆盖 A.F() 的输出时如何在 C.F() 中使用,从而避免重复代码?
我想这不是最好的做法。如果你能避免代码重写 - 当然,那就去做吧。
最好在
A
中定义F()
,正如你所说的,B
和C
的公共代码],然后在C.F()
中覆盖它,使用A::F()
调用覆盖函数。我的意思是,有了这个,您可以先执行父方法A.F()
,然后再执行新的额外逻辑。如果您从A
继承B
,那么您根本不应该为B
中的这个方法操心。
请注意,从这个角度来看,顺序很重要。如果您希望首先执行父代码,请在附加逻辑之前调用 A::F()
。不过,由您决定选择什么顺序。
编辑
如果您不知道如何在子方法中调用父方法代码,我将为您添加一个 link 和一个很好的示例。看一看,玩得开心