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

时间:2013-09-04 07:57:43

标签: c++ opencv refactoring

我有一个使用opencv函数的程序,例如calibratecamera。现在我正在处理我的代码的最终版本,我想知道如果不是调用opencv的函数而是在我的类中继承它们会使我的程序“更好”吗?

2 个答案:

答案 0 :(得分:3)

正如评论中指出的那样,你的问题非常“笼统”,并且有些混淆。但是,对于“继承更好吗?”这一问题有一个普遍的答案。当然,作为一般答案,它过于简单,可能不适用于您的情况。

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

  

首选组合继承

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

他们提出陈述案件的原因是:

  

避免继承税:继承是第二个最紧密的耦合关系   C ++,仅次于友谊。紧耦合是不希望的,应该是   尽可能避免。因此,除非你喜欢组成继承   知道后者真正有益于你的设计。

所以,一般的建议是尽可能尽量避免继承,并且在使用它时总是保守,除非你有很强的理由 。例如,如果要对所谓的“is-a”关系进行建模,则可以使用公共继承。另一方面,如果您处于以下某种情况,则可以使用非公共继承:

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

或在其他不太常见的情况下。

无论您的最终选择是什么,请确保仅从为了成为基类而设计的类继承。例如,确保基类析构函数是虚拟的。正如引用的书所述:

  

使用独立类作为基础是一个严重的设计错误   应该避免。要添加行为,请更喜欢添加nonmem-ber   函数而不是成员函数(参见条款44)。要添加状态,   更喜欢组成而不是继承(见第34项)。避免   继承自具体基类

答案 1 :(得分:1)

OpenCV是一个定义良好的API的库。如果您的现有应用程序使用此库中捆绑的功能,并且您没有合理的理由为其添加其他功能,则无法通过包装它们获得优势。

如果您想更改界面,因为您认为它会使您的代码更清洁,我会担心维护,以防API将来发生变化。

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