对于大学课程,我正在用c ++实现一个线性方程组(以及一种解决方法)。该系统由(稀疏)矩阵和向量组成。我写了一个额外的类来实现矩阵并提供一些与之相关的函数(检查它是否是对称的,将它与向量相乘,将它打印到stdout等)。
我的问题如下:我的类“systemLinearEquations”是否应该继承“sparseMatrix”类,还是应该有“sparseMatrix”类的组件?
无论哪种方式有什么好处/缺点?
答案 0 :(得分:4)
线性方程不是矩阵,而是表示为1。通常在这种情况下,您应该更喜欢组合而不是继承。
这样想:有人可以威胁我的线性方程式,好像它是一个矩阵吗?所有矩阵运算对线性方程都有意义吗?如果这两个问题的答案都是yes
,那么可能更好的选择是继承矩阵,否则你最好使用组合。
答案 1 :(得分:2)
一般来说,继承满足一般性,这意味着基类提供了通用过程,而子类提供了基本行为的特定实现(覆盖)或扩展。
所以这真的取决于你正在照顾的......
答案 2 :(得分:1)
最重要的标准:公共继承代表 IS-A 关系。在以下内容中:class Gadget : public Widget
,您声称每个Gadget
都是 Widget
并且可以执行Widget
可以执行的任何操作。如果某个操作需要输入Widget
,则在传入Gadget
时它必须正常工作。
这些是你在判断继承设计时应该戴上的眼镜。如果可以在任何可以使用矩阵的地方使用线性系统,并支持矩阵支持的所有操作,那么就可以继承。否则,你应该赞成合成。
我不知道你的特定任务的细节,但我个人更喜欢这里的作文。矩阵肯定会支持transpose()
操作。线性系统应该怎么做?例如,如果它不是正方形,那么您将无法获得右侧的值。