【问题标题】:How to define a matrix-matrix multiplication so that it works for vectorXvector, vectorXmatrix, and matrixXvector as well?如何定义矩阵-矩阵乘法,使其也适用于vectorXvector、vectorXmatrix和matrixXvector?
【发布时间】:2017-03-10 18:36:24
【问题描述】:

我已经定义了一个矩阵类class MyMatrix和一个成员函数MyMatrix operator*(const MyMatrix & B)const;但是这个函数只适用于MyMatrix * MyMatrix。我想扩展此定义的范围,以便它也可以用于vector<double> * MyMatrixMyMatrix * vector<double>vector<double> * vector<double>(用于内部和外部产品)。如果我不想为向量定义另一个类,我应该怎么做?我想有一种方法可以在调用此函数时自动将vector<double> 转换为MyMatrix。但我不知道该怎么做。

【问题讨论】:

  • “内外产品”,你怎么知道哪个*做什么?
  • @n.m.我的意思是它应该适用于这两种情况。

标签: c++ class matrix operator-overloading derived-class


【解决方案1】:

如果您想自动将vector<double> 转换为MyMatrix,则为MyMatrix 定义一个构造函数,该构造函数将vector<double> 作为参数并从该向量构造一个矩阵。但这并不能完全解决您的问题,因为您需要注意行向量和列向量之间的差异。您还可以重载 * 运算符以任意顺序获取向量和 MyMatrix,以及向量和向量。比如:

MyMatrix operator*(const vector<double>& v, const MyMatrix& m);

等等

【讨论】:

  • 也可以friend
  • 但是您定义中的返回值是 MyMatrix,而 vector * matrix 应该产生一个向量。有什么方法可以避免定义 vector 和 MyMatrix 之间的任何转换,并且所有函数都可以以想要的方式工作?
  • 好吧,如果您希望返回值是一个向量,请将其改为一个向量。如何设计课程和操作取决于您。我只是解决了在 C++ 中通过运算符重载可以做的事情。剩下的就看你自己了。
  • @grigor 应该是 MyMatrix 的成员函数吗?
  • @macroland 为什么我需要将其设为好友函数?
猜你喜欢
  • 1970-01-01
  • 2016-02-22
  • 2017-03-11
  • 2013-12-23
  • 2019-09-22
  • 2018-04-11
  • 2020-12-05
  • 2021-05-02
  • 1970-01-01
相关资源
最近更新 更多