加法运算符重载不起作用

时间:2014-04-14 02:37:31

标签: c++ operator-overloading

我无法让我的添加重载功能也正常工作,并且想知道我是否可以得到一些帮助。类中的其余函数和构造函数是默认的,无法为此项目更改,因此无论它们是否正确。这意味着我遇到的唯一问题是操作员自己重载功能。提前致谢。

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;

2 个答案:

答案 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);