コピーコンストラクタと代入演算子に問題があります。行列を乗算するコードを記述している:
Matrix& Matrix::operator * (const Matrix &second) const
{
// Create result matrix
Matrix result(Rows(), second.Columns());
// Multiply matricies
for (unsigned i = 0; i < Rows(); i++)
{
for (unsigned j = 0; j < second.Columns(); j++)
{
result[i][j] = 0.0;
for (unsigned k = 0; k < Columns(); k++)
{
result[i][j] += m_matrix[i][k] * second[k][j];
}
}
}
return result;
}
メインコードでは、演算子を呼び出します。
Matrix C = A * B;
ただし、コードは代入前に結果変数を破棄します。そのようなコードを正しく記述して結果行列を返すにはどうすればよいですか?コピーコンストラクタは次のとおりです。
Matrix::Matrix(const Matrix& matrix)
{
AllocateMatrixArray(matrix.Rows(), matrix.Columns());
CopyMatrixData(matrix);
}
代入演算子は次のとおりです。
Matrix& Matrix::operator = (const Matrix& other)
{
AllocateMatrixArray(other.Rows(), other.Columns());
CopyMatrixData(other);
return *this;
}
ただし、コンパイラはそれを使用していないことがわかります。コピーコンストラクタで十分です。