[問題] 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