[问题] operator overloading : 矩阵乘法

楼主: skyconquer (梅郭曲)   2015-01-22 15:33:52
开发平台(Platform): (Ex: VC++, GCC, Linux, ...)
VC++ 2013 express
问题(Question):
请教一下各位高手,
小弟写了一个 Matrix 的 class
想要用 operator overloading 的方式将" * " 定义为矩阵的乘法。
我的写法如下:
首先用一个vector <double> VecRow作为矩阵的行;
如: 1 2 3 <- 第一个vector <double> ,里面装3个数字做为entry,构成第一个row
4 5 6 <- 第二个vector <double> ,里面装3个数字做为entry,构成第二个row
接着用一个vector <vector <double>> VecColumn 将上述的vector <double>装起来
构成一个矩阵。
其中,private的data member: RowNum=VecRow.size();
ColumnNum=VecColumn.size();
class的大致写法如下:
程式码(Code):(请善用置底文网页, 记得排版)
class Matrix{
friend Matrix operator *(const double&, Matrix&);
public:
Matrix() = default;
Matrix operator * (Matrix&);
.
.
.
private:
std::vector <double> VecRow;
std::vector <std::vector <double>> VecColumn;
std::vector <std::string> StrDouble(std::string&);
int RowNum = 0;
int ColumnNum = 0;
};
inline Matrix Matrix::operator * (Matrix& M2)
{
Matrix MM ;
int M_Row = RowNum; // j: # of column
int M_Column = ColumnNum; // i: # of rows
int M2_Row = M2.RowNum; // j: # of column
int M2_Column = M2.ColumnNum; // i: # of rows
for (auto i = 0; i != M_Column; i++)
{
for (auto k = 0; k != M2_Row; k++)
{
double entry = 0.0;
for (auto j = 0; j != M_Row; j++)
{
double T = VecColumn[i][j] * M2.VecColumn[j][k];
entry += T;
}
MM.VecRow.push_back(entry);
}
MM.VecColumn.push_back(MM.VecRow);
MM.VecRow.clear();
}
return MM;
}
补充说明(Supplement):
我有问题的是上面的operator overloading "*"
我这样写后,可以做一次矩阵的乘法,
可是我想要做2次以上的矩阵连乘就什么都跑不出来
想请问下我该怎么修正? 谢谢
作者: wenyonba (射后不理很XX啊!!!!)   2015-01-22 16:39:00
上面的 operator * 的引数不是应该都要是 Matrix & 吗?两个 Matrix 乘完传回一个 Matrix
作者: tj386 (最爱欧阳三姊妹♥♥♥)   2015-01-22 17:03:00
MM的 RowNum 和 ColumnNum 没给值,其他我测试没问题,但不确但不确定你的main和constructor怎么写的

Links booklink

Contact Us: admin [ a t ] ucptt.com