继承、覆盖和虚函数,以避免重复代码
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()
是否是一种好方法?我想避免在 2 种方法中使用相同的代码。其他是什么 可能性? - 使用通用代码定义
A.F()
并在C.F()
中覆盖它。在覆盖时,如何在 C.F(( 中使用 A.F(( 的输出,从而避免重复的代码?
我想
这不是最好的选择。如果你可以避免代码重写 - 当然,这样做。
正如您所说,最好在
A
中定义F()
,使用B
和C
的通用代码,然后在C.F()
中使用A::F()
在 overriden 函数中使用调用来覆盖它。我的意思是,有了这个,您可以首先执行父方法A.F()
,然后使用新的额外逻辑。如果你从A
继承B
,那么你根本不应该在B
中为这种方法而烦恼。
请注意,从这个角度来看,顺序很重要。如果希望父代码首先执行,请在附加逻辑之前调用A::F()
。不过,由您决定,选择什么顺序。
编辑
如果您不知道如何在子方法中调用父方法代码,我将为您添加一个带有良好示例的链接。看一看,玩得开心。
相关文章:
- 继承、覆盖和虚函数,以避免重复代码
- 在多个头文件中从接口声明被覆盖的函数时,如何避免重复代码?
- 为什么无法覆盖涉及第三方代码的模板类的运算符<<?
- 当存在覆盖歧义函数时,代码如何运行?
- 如何使用介子在C++中执行代码覆盖?
- lnk1114无法覆盖原始文件"xxx.lib",错误代码32
- 为什么这段代码说 C::f 覆盖 A::f 而不是 B::f?
- 如何在标题文件中获取成员功能的正确代码覆盖范围
- 在我的代码覆盖本身时遇到麻烦,我不确定为什么
- 在某些代码中覆盖方法的方式是什么?
- 从覆盖范围报告中删除自动生成的异常代码
- C++ 为什么我的覆盖代码 const int x = *(&y);工作?
- 静态库(.lib)Visual Studio的代码覆盖范围
- 在C 98,C 11交叉兼容代码中处理覆盖的优雅方法
- Visual Studio TDD Project的代码覆盖工具
- 内存将被代码中的溢出覆盖
- 代码覆盖范围结果:导出到Excel
- 使用Visual Studio对本机VSC++的gtest单元测试进行代码覆盖
- bullseye代码覆盖浏览器没有所有的源文件
- 代码覆盖变量,尽管它不应该