对于一门大学课程,我正在用c++实现一个线性方程组(以及一种求解它的方法)。这个系统由一个(稀疏)矩阵和一个向量组成。我已经编写了一个额外的类来实现矩阵,并提供了一些与它相关的函数(检查它是否对称,将它与向量相乘,打印到stdout,等等)。
我的问题如下:我的类"systemLinearEquations“应该继承"sparseMatrix”类,还是应该拥有"sparseMatrix“类的组件?
这两种方式的优点/缺点是什么?
发布于 2014-04-28 20:49:10
线性方程不是矩阵,而是用矩阵表示的。通常,在这种情况下,您应该更喜欢组合而不是继承。
可以这样想:有人能威胁我的线性方程,就好像它是一个矩阵一样?对于线性方程,所有的矩阵运算都有意义吗?如果这两个问题的答案都是yes,那么可能更好的选择是继承矩阵,否则最好使用组合。
发布于 2014-04-28 20:53:06
一般来说,继承满足通用性,这意味着基类提供公共过程,而子类提供基本行为的特定实现(覆盖)或扩展。
所以这真的取决于你在看什么。
发布于 2014-04-28 20:53:25
最重要的标准是:公共继承代表一个IS-A关系。在下面的代码中:class Gadget : public Widget,您声称每个Gadget 都是一个 Widget,可以做Widget能做的任何事情。如果一个操作需要输入一个Widget,当传入一个Gadget时,它必须正常工作。
这些是你在判断继承设计时应该戴上的眼镜。如果线性系统可以用于任何可以使用矩阵的地方,并且支持矩阵支持的所有操作,那么您可以继承。否则,你应该倾向于构图。
我不知道你具体任务的细节,但我个人更喜欢这里的作文。矩阵肯定会支持transpose()运算。对于线性系统,这应该做什么?例如,如果它不是正方形,您将很难获得右侧的值。
https://stackoverflow.com/questions/23341518
复制相似问题