如何继承矩阵类?

时间:2016-10-25 18:23:40

标签: c++ matrix

我目前有一个matrix类,std::vector<std::vector<double>>。我还有一个vector类(不要与stl的向量混淆,它更多是数学的1,2,3维度向量),这是一个std::vector<double>

在我完成这两个课程后,我遇到了问题,因为现在我想做 tmp_vector * tmp_matrix ,但由于它们的类型不同,我无法做到。

所以我的问题是:

什么是合适的设计选择?

  • 我应该从同一个类继承matrixvector(比如说​​matvec类,这只是一个空类) 或
  • 我应该从矩阵类继承向量(这里我从重matrix类继承向量)

2 个答案:

答案 0 :(得分:3)

  

我应该从同一个类继承矩阵和向量吗?

我认为这样的设计不会帮助你进行乘法运算。

  

我应该从矩阵类继承向量吗?

可能是。但如果我是你,如果一个原因是乘法运算的实现,我就不会这样做。

对于(矢量,矩阵)(矩阵,矢量)组合,我建议您只需重载 operator*。我相信这是解决问题最自然的方式。

答案 1 :(得分:2)

通常,实现将(数学)向量和矩阵表示为来自stl向量或向量向量的派生类的类不是非常有效。在数值库中主要完成的是具有不从任何东西派生的Matrix类,但是包含指向非常简单且直的一维数组的指针。双打,根本不使用stl。

通过适当地重载()运算符来实现作为多维矩阵的行为,以进行正确的索引计算。

矢量很可能是具有一列或一行的矩阵,因为只要参数列表不同,就可以有多个()的重载。这将允许您使用一个索引来处理Vector中的元素。

您可以为这些类重载+, - 和*,并为它们提供转换构造函数。不要忘记添加析构函数来释放内存和复制构造函数,以防止两个这样的矩阵共享相同的内存。

出于同样的原因,您还需要重载赋值运算符。它应该释放分配左侧的旧内容并重新分配适当的内存量。