opencv函数的继承是否使我的程序变得更好
Does the inheritance of opencv functions make my program better?
我有一个使用opencv函数(如calibratecamera
)的程序。现在我正在编写我的代码的最终版本,我想知道我在类中继承它们是否会让我的程序"更好",而不是调用opencv的函数?
正如评论中所指出的,您的问题非常"笼统",而且在某种程度上令人困惑。然而,"继承更好吗?"这个问题有一个普遍的答案。当然,作为一个一般的答案,它过于简单化了,可能不适用于你的情况。
"C++编码标准"(Sutter,Alexandrescu)中的第58项标题为
更喜欢组合而不是继承
你也可以在其他几本书中找到类似的建议。
他们提出理由的原因是:
避免遗产税:遗产是C++,仅次于友谊。紧耦合是不可取的,应该尽可能避免。因此,除非您要知道后者确实有利于您的设计。
因此,一般的建议是尽量避免继承,并且在使用它时始终保持保守,除非你有非常有力的理由。例如,如果您正在建模所谓的"is-a"关系,那么您就有使用公共继承的情况。另一方面,如果您处于以下情况之一,则可以使用非公开继承:
- 如果需要覆盖虚拟函数
- 如果您需要访问受保护的成员
或者在其他不太频繁的情况下。
无论您的最终选择是什么,请确保只继承已设计为基类的类。例如,请确保基类析构函数是虚拟的。正如引用的书所提出的:
使用独立类作为基是一个严重的设计错误,并且应该避免。若要添加行为,请选择添加非成员职能而非成员职能(见项目44)。为了添加状态,更喜欢组合而不是继承(见第34项)。避免从混凝土基类继承
OpenCV是一个具有定义良好的API的库。如果您的现有应用程序使用该库中捆绑的函数,而您没有正当理由向这些函数添加额外的功能,那么通过包装它们就没有任何好处。
如果你想更改接口,因为你认为它会让你的代码更干净,我会担心维护,以防API将来会更改。
在更改应用程序的设计时,您的决策应基于特定原因"我想让我的程序变得更好"太抽象了。
- 当我在main中声明了我的2d数组时,为什么我的程序会退出
- 为什么我的程序在for循环中k=0时返回垃圾值
- 为什么它只打印双链接列表的第一个值,而我的程序却崩溃了
- 我的程序没有从文件中读取并输入数据
- 为什么我的C++程序的程序集输出充满了 .ascii,没有汇编代码?
- 我的程序有一个保存配置文件的GUI,如何双击此配置文件以直接加载带有配置数据的GUI?
- 为什么我的程序不能显示斐波那契级数?
- 为什么我的程序在使用预留后没有加速?
- 为什么如果我添加这一行,我的程序会不断询问值
- 为什么当我输入较大的数字时,我的程序会到达文件末尾?
- 这是使用回溯的 nqueen 问题,但我使用了动态 2d 数组,我的程序编译良好,但不返回任何输出
- 为什么我的程序在 O0 和 O2 的优化级别返回不同的结果
- 为什么我的 c++ 程序检查不是初始化的变量?
- 为什么我的程序在输入某个形状的面积的测量值后没有结束?
- 在 fork() 之后,我在我的程序中不断得到相同的 pid
- C++ - 为什么我的程序在再次调用函数后关闭?
- 我的程序将 26 个字母转换为 ascII 没有显示正确答案
- 为什么我的程序在读取/写入文件时会删除最重要的数字?
- 我需要如何更改我的程序以使用打开/关闭原则?
- 我的 c++ 程序似乎没有发现字符串和我拥有但输入使用 getline 的变量之间的比较