纯虚拟 C++ 编码的优点和缺点

Pros and cons for pure virtual c++ coding

我来自 java 背景,今天与我们的一位 C++ 开发人员就将现有代码转换为具有纯虚拟方法(接口)并将它们用作依赖项注入进行了对话在代码上更好地解耦。

他试图说服我,我们应该只在代码中有 "logic" 时使用它们,如果代码只是从 PC 收集信息,则没有必要。

长话短说,我正在寻找重构代码并使用 IoC 和纯虚拟方法而不是按原样保留工作耦合代码的充分理由。

您应该或不应该重构现有代码的原因有很多。每种情况都是独一无二的。如果你正在谈论某种具有大型代码库的项目,并且你想重构它的核心,它运行良好且经过适当测试,而不是在 99% 的情况下,我建议你不要这样做。您可以在测试代码中添加更多错误,而无需进行真正需要的改进。 如果代码只是收集一些信息,您可以提取用于测试使用此对象的 class 的接口。如果您出于某些原因不使用单元测试而不是保持原样。 总的来说,你的对手可能是对的,当你真正需要它们时创建接口并编写干净的代码并轻松提取依赖项。

Why use pure-virtual methods?

我尝试编写基础 class 函数来为所有接口方法提供默认行为。我对这些默认设置仅生成一些错误处理(使用本地接受的机制)的频率感到惊讶。

例如,我编写了接收命令以设置 LED 状态的代码。在开发过程中,'other software' 有时会(错误地)请求要求明确不允许的颜色。 ('Red' 不允许在状态 led 5 上)我的默认函数生成了相应的错误消息,并确定了哪个 'other software' 发送了错误的请求。


还有一些情况在某些方面没有适当的默认行为。对于这些情况,我创建了纯虚拟方法。声明方法纯虚拟 记录 基础 class 将不提供功能的想法,因此要求所有派生 class 必须提供一些代码来支持这个概念。


"A pure virtual function or pure virtual method is a virtual function that is required to be implemented by a derived class that is not abstract" - 维基百科

good reasons why to refactor the code?

可读性。