我有一个使用opencv函数的程序,例如calibratecamera
。现在我正在处理我的代码的最终版本,我想知道如果不是调用opencv的函数而是在我的类中继承它们会使我的程序“更好”吗?
答案 0 :(得分:3)
正如评论中指出的那样,你的问题非常“笼统”,并且有些混淆。但是,对于“继承更好吗?”这一问题有一个普遍的答案。当然,作为一般答案,它过于简单,可能不适用于您的情况。
“C ++编码标准”(Sutter,Alexandrescu)中的第58项标题为
首选组合继承
您也可以在其他几本书中找到类似的建议。
他们提出陈述案件的原因是:
避免继承税:继承是第二个最紧密的耦合关系 C ++,仅次于友谊。紧耦合是不希望的,应该是 尽可能避免。因此,除非你喜欢组成继承 知道后者真正有益于你的设计。
所以,一般的建议是尽可能尽量避免继承,并且在使用它时总是保守,除非你有很强的理由 。例如,如果要对所谓的“is-a”关系进行建模,则可以使用公共继承。另一方面,如果您处于以下某种情况,则可以使用非公共继承:
或在其他不太常见的情况下。
无论您的最终选择是什么,请确保仅从为了成为基类而设计的类继承。例如,确保基类析构函数是虚拟的。正如引用的书所述:
使用独立类作为基础是一个严重的设计错误 应该避免。要添加行为,请更喜欢添加nonmem-ber 函数而不是成员函数(参见条款44)。要添加状态, 更喜欢组成而不是继承(见第34项)。避免 继承自具体基类
答案 1 :(得分:1)
OpenCV是一个定义良好的API的库。如果您的现有应用程序使用此库中捆绑的功能,并且您没有合理的理由为其添加其他功能,则无法通过包装它们获得优势。
如果您想更改界面,因为您认为它会使您的代码更清洁,我会担心维护,以防API将来发生变化。
在更改应用的 设计 时, 决策应基于特定原因 。 “我想让我的程序变得更好”太抽象了。