【问题标题】:inherit from a class or use it as a component?从类继承还是将其用作组件?
【发布时间】:2014-04-28 12:44:58
【问题描述】:

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

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

这两种方法有什么好处/缺点?

【问题讨论】:

    标签: c++ class inheritance


    【解决方案1】:

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

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

    【讨论】:

      【解决方案2】:

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

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

      【讨论】:

        【解决方案3】:

        最重要的标准:公共继承代表一种IS-A关系。在下面:class Gadget : public Widget,你声称每个Gadget 是一个 Widget 并且可以做任何Widget 可以做的事情。如果一个操作需要 Widget 输入,它必须在传入 Gadget 时正常工作。

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

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

        【讨论】:

          猜你喜欢
          • 2011-08-29
          • 2018-06-09
          • 2016-09-02
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2011-12-28
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多