Good day. Faced one task with operator overloading, in my case, the first was addition + for two matrices. I could not add two objects declared using the pointer and the operator new. An error was output; something like an expression should refer to an integer type ...
Matrix* matrixPA = new Matrix(3,3); Matrix* matrixPB = new Matrix(3,3); Matrix* matrixPC = new Matrix(3,3); matrixPC = matrixPA + matrixPB;// запись 1 // если я делал вот так matrixPC = matrixPA->operator+(matrixPB);-код //работал, но хотелось бы чтобы было как в записи 1 ... Matrix Matrix::operator+(Matrix* matrix) { return *sum(matrix); } Matrix Matrix::operator=(Matrix* matrix) { for (size_t i = 0; i < str; i++) { for (size_t j = 0; j < stolb; j++) { this->matrix[i][j] = matrix->matrix[i][j]; } } return *this; } sum: function sum:
Matrix Matrix::sum(Matrix* matrix) { if (matrix.str == this->str && matrix.stolb == this->stolb) { Matrix *matrixC = new Matrix(str, stolb); for (size_t i(0); i < this->str; i++) for (size_t j(0); j < this->stolb; j++) matrixC->matrix[i][j] = this->matrix[i][j] + matrix->matrix[i][j]; return *matrixC; } else std::cout << "Матрицы должны быть одинаковых размерностей!" << std::endl; return *this; } But if this is the case,
Matrix matrixPA(3, 3); Matrix matrixPB (3, 3); Matrix matrixPC(3, 3); matrixPC = matrixPA + matrixPB; ... Matrix Matrix::operator+(Matrix& matrix) { return sum(matrix); } Matrix Matrix::operator=(Matrix& matrix) { for (size_t i = 0; i < str; i++) { for (size_t j = 0; j < stolb; j++) { this->matrix[i][j] = matrix.matrix[i][j]; } } return *this; } sum: function sum:
Matrix Matrix::sum(Matrix& matrix) { if (matrix.str == this->str && matrix.stolb == this->stolb) { Matrix matrixC(str, stolb); for (size_t i(0); i < this->str; i++) for (size_t j(0); j < this->stolb; j++) matrixC.matrix[i][j] = this->matrix[i][j] + matrix.matrix[i][j]; return matrixC; } else std::cout << "Матрицы должны быть одинаковых размерностей!" << std::endl; return *this; } then everything works. Why??