从类继承还是将其用作组件?

时间:2014-04-28 12:44:59

标签: c++ class inheritance

对于大学课程,我正在用c ++实现一个线性方程组(以及一种解决方法)。该系统由(稀疏)矩阵和向量组成。我写了一个额外的类来实现矩阵并提供一些与之相关的函数(检查它是否是对称的,将它与向量相乘,将它打印到stdout等)。

我的问题如下:我的类“systemLinearEquations”是否应该继承“sparseMatrix”类,还是应该有“sparseMatrix”类的组件?

无论哪种方式有什么好处/缺点?

3 个答案:

答案 0 :(得分:4)

线性方程不是矩阵,而是表示为1。通常在这种情况下,您应该更喜欢组合而不是继承。

这样想:有人可以威胁我的线性方程式,好像它是一个矩阵吗?所有矩阵运算对线性方程都有意义吗?如果这两个问题的答案都是yes,那么可能更好的选择是继承矩阵,否则你最好使用组合。

答案 1 :(得分:2)

一般来说,继承满足一般性,这意味着基类提供了通用过程,而子类提供了基本行为的特定实现(覆盖)或扩展。

所以这真的取决于你正在照顾的......

答案 2 :(得分:1)

最重要的标准:公共继承代表 IS-A 关系。在以下内容中:class Gadget : public Widget,您声称每个Gadget 都是 Widget并且可以执行Widget可以执行的任何操作。如果某个操作需要输入Widget,则在传入Gadget时它必须正常工作。

这些是你在判断继承设计时应该戴上的眼镜。如果可以在任何可以使用矩阵的地方使用线性系统,并支持矩阵支持的所有操作,那么就可以继承。否则,你应该赞成合成。

我不知道你的特定任务的细节,但我个人更喜欢这里的作文。矩阵肯定会支持transpose()操作。线性系统应该怎么做?例如,如果它不是正方形,那么您将无法获得右侧的值。