Почему в операторе присваивания мы возвращаем *this, а не просто this?
Matrix & Matrix::operator =(const Matrix& m2) {
if (this != &m2) {
(Matrix(m2)).swap(*this);
}
return *this;
}
Matrix Matrix::operator +(const Matrix &m2) {
if (m2.columns != this->columns || m2.rows != this->rows) {
std::cout << "Error" << std::endl;
exit(1);
}
Matrix temp(this->rows, this->columns);
for (int i = 0; i < this->rows; i++) {
for (int j = 0; j < this->columns; j++) {
temp[i][j] = m2.matrix[i][j] + this->matrix[i][j];
}
}
return temp;
}
Ответ
Возвращать из оператора присваивания вы можете что угодно (или вообще ничего). Главное, чтобы в операторе присваивания, как и в любой другой функции, тип значения, указанного в return, совпадал с (или был приводим к) типу возврата, указанного в объявлении функции.
Вы же сами написали, что ваш оператор присваивания имеет тип возврата Matrix &. Это значит, что в return вам придется указывать lvalue типа Matrix. *this таким lvalue является, а this - не является.
Тем не менее никто вам не запрещает написать оператор присваивания, который будет возвращать, например, Matrix *. В таком операторе присваивания вы можете возвращать this
Matrix *Matrix::operator =(const Matrix& m2) {
...
return this;
}
Это будет весьма странным типом возврата для оператора присваивания, но ничего нелегального тут нет.
Другими словами, что вы сами указали в типе возврата функции - то и возвращайте. Так что вопрос о том, почему в вашем случае возвращать надо именно *this - это вопрос именно к вам. Вы сами так захотели.
Комментариев нет:
Отправить комментарий