opencv函数的继承是否使我的程序变得更好

Does the inheritance of opencv functions make my program better?

本文关键字:我的 程序 变得更好 是否 函数 继承 opencv      更新时间:2023-10-16

我有一个使用opencv函数(如calibratecamera)的程序。现在我正在编写我的代码的最终版本,我想知道我在类中继承它们是否会让我的程序"更好",而不是调用opencv的函数?

正如评论中所指出的,您的问题非常"笼统",而且在某种程度上令人困惑。然而,"继承更好吗?"这个问题有一个普遍的答案。当然,作为一个一般的答案,它过于简单化了,可能不适用于你的情况。

"C++编码标准"(Sutter,Alexandrescu)中的第58项标题为

更喜欢组合而不是继承

你也可以在其他几本书中找到类似的建议。

他们提出理由的原因是:

避免遗产税:遗产是C++,仅次于友谊。紧耦合是不可取的,应该尽可能避免。因此,除非您要知道后者确实有利于您的设计。

因此,一般的建议是尽量避免继承,并且在使用它时始终保持保守,除非你有非常有力的理由。例如,如果您正在建模所谓的"is-a"关系,那么您就有使用公共继承的情况。另一方面,如果您处于以下情况之一,则可以使用非公开继承:

  • 如果需要覆盖虚拟函数
  • 如果您需要访问受保护的成员

或者在其他不太频繁的情况下。

无论您的最终选择是什么,请确保只继承已设计为基类的类。例如,请确保基类析构函数是虚拟的。正如引用的书所提出的:

使用独立类作为基是一个严重的设计错误,并且应该避免。若要添加行为,请选择添加非成员职能而非成员职能(见项目44)。为了添加状态,更喜欢组合而不是继承(见第34项)。避免从混凝土基类继承

OpenCV是一个具有定义良好的API的库。如果您的现有应用程序使用该库中捆绑的函数,而您没有正当理由向这些函数添加额外的功能,那么通过包装它们就没有任何好处。

如果你想更改接口,因为你认为它会让你的代码更干净,我会担心维护,以防API将来会更改。

在更改应用程序的设计时,您的决策应基于特定原因"我想让我的程序变得更好"太抽象了。

相关文章: