c++ - 继承、覆盖和虚函数,避免重复代码
问题描述
我有三个类,A、B 和 C。B 和 C 是从 A 派生的。B 和 C 都需要实现一个方法F
。BF() 中的代码是 CF() 的子集。
A.F()
声明为虚函数并定义B.F()
and是一种好方法C.F()
吗?两种方法中会有相同的代码,我想避免。其他的可能性是什么?- 使用通用代码定义
A.F()
并在C.F()
. 在重写的同时,AF() 的输出如何在 CF() 中使用,从而避免重复代码?
解决方案
我想这不是最好的做法。如果您可以避免代码重写 - 当然,请这样做。
正如您所说,最好使用and的公共代码定义
F()
in ,然后使用call in 覆盖函数覆盖它。我的意思是,有了这个,你可以先执行父方法,然后再使用新的额外逻辑。如果您继承自,那么您根本不应该为这种方法而烦恼。A
B
C
C.F()
A::F()
A.F()
B
A
B
请注意,从这个角度来看,顺序很重要。如果您希望首先执行父代码,请A::F()
在您的附加逻辑之前调用。不过,选择什么顺序由您决定。
编辑
如果您不知道如何在子方法中调用父方法代码,我将为您添加一个带有很好示例的链接。看一看,玩得开心。
推荐阅读
- excel-formula - 当一列中的值与另一列中的值匹配时,有关计算唯一IDS数量的Excel问题
- java - 如何获取通过谷歌登录的用户的firebase UID?
- reactjs - 如何正确设置它,这样我就不会对未安装的组件执行状态更新?
- reactjs - React Native App,如何在浏览器上运行?它不是一个世博项目
- ansible - 在 Ansible 中使用条件 when 语句,仅在调用某个版本的包时运行 playbook 中的任务
- javascript - 使用聚合 MongoDB 计算平均值
- linux - 单链中 BPF 过滤器之间的确切关系是什么
- wireshark - 尝试使用 Time Shift 工具时,Wireshark 给出错误
- python - AttributeError:模块'tensorflow_core.compat.v2'没有属性'__internal__'(一周前工作?)
- terraform - Terraform 无法检测到 mongodb .tf 文件中的所有更改