我无法让我的添加重载功能也正常工作,并且想知道我是否可以得到一些帮助。类中的其余函数和构造函数是默认的,无法为此项目更改,因此无论它们是否正确。这意味着我遇到的唯一问题是操作员自己重载功能。提前致谢。
Matrix.h:
class Matrix {
// models a matrix of two dimentions, i. e. rows and columns of values
public:
Matrix & operator=(const Matrix& m);
Matrix & operator+(const Matrix& m);
Matrix.cpp:
//not included are the default and copy constructors plus read and write
//functions, etc...
Matrix& Matrix::operator=(const Matrix& m) {
this->rows = m.rows;
this->cols = m.cols;
matrix = vector< vector<double> >(rows);
for (int r=0; r<rows; r++)
matrix[r] = vector<double>(cols);
for (int r=0; r<rows; r++)
for (int c=0; c<cols; c++)
matrix[r][c] = m.matrix[r][c];
return *this;
}
Matrix & Matrix::operator+(const Matrix& m) {
Matrix newMatrix;
newMatrix = vector< vector<double> >(rows);
if (this->rows != m.rows || this->cols != m.cols) {
newMatrix.rows = 0;
newMatrix.cols = 0;
return newMatrix;
}
else {
newMatrix.rows = m.rows;
newMatrix.cols = m.cols;
for (int r = 0; r < m.rows; r++) {
newMatrix.matrix[r] = vector<double>(m.cols);
}
for (int r = 0; r < m.rows; r++) {
for (int c = 0; c < m.cols; c++)
newMatrix.matrix[r][c] = matrix[r][c] + m.matrix[r][c];
}
return newMatrix;
}
}
Main.cpp的:
//in main.cpp I am trying to do the following operation and then output the result:
e = a + b;
答案 0 :(得分:2)
虽然赋值运算符应返回对左对象的引用(分别为*this
),但所有其他中缀运算符都应按值返回。使用+=
之类的复合赋值运算符最容易编写它们
由于这些原因,大多数中缀非赋值运算符都是自由函数。
中缀+的一般模式:
template<typename T> inline const T operator(const T& a, const T& b) {
T c = a;
return c += b;
}
您不希望将此类中缀运算符作为成员函数,因为这会破坏对称性
相反,只需定义复合运算符+=
。
答案 1 :(得分:2)
您正在返回对临时newMatrix
相反,您的加法运算符应该按值返回结果。
函数签名应如下所示:
Matrix operator+(const Matrix& m);