Poprawne przeciążenie operatora +=

0

Witam
Jestem w trakcie pisania klasy Matrix - do wykonywnia operacji na macierzach. Zastanawiam się, czy dobrze przeciążyłem operator +=
Mam takie coś

template<typename T>
Matrix<T> Matrix<T>::operator+=( T value )
{
	//Matrix<T>* addedMatrix = new Matrix<T>(this->rows,this->columns);
	for (int i=0;i<this->rows;i++)
	{
		for (int j=0;j<this->columns;j++)
		{
			datavector.at(i).at(j) += value;
		}
	}
	return this;
}

Jeżeli dobrze rozumiem to w momencie gdy zostanie wywołane return this zostanie odpalony konstruktor kopiujący i zostanie zwrócona macierz. Czy jest jakiś sposób żebym mógł zwrócić referencję na this ??

Matrix<T>& Matrix<T>::operator+=( T value )

czy to raczej nie jest dobry pomysł i powinienem zostawić wersję obecną ??

1
  1. this to wskaźnik wg mnie, *this to obiekt.
  2. Chyba można robić wersje na referencjach. Generalnie optymalizacje w kompilatorze i tak usuwają kopiowania. Ale ekspertem od C++ nie jestem.
  3. Wg mnie lepiej abyś używał jednego wektora lub (względnie) jednej tablicy jednowymiarowej i na tym emulował sobie indeksowanie wielowymiarowe. Zyskasz na szybkości i zajętości pamięci.

Update:
Zgodnie z http://en.wikipedia.org/wiki/Operators_in_C_and_C%2B%2B#Compound_assignment_operators powinieneś zwracać referencję do *this, bo operator += z założenia modyfikuje obiekt na którym jest wywoływany.

0

Tylko w jaki sposób mam zwrócić referencję do this ??
Próbowałem różne sposoby ale mnie kompilator nie przepuszcza
robiłem

return &this;
return &*this;

ale bezskutecznie

2
Matrix<T>& Matrix<T>::operator+=( T value )
{
    ...
    return *this;
}
1

Jeszcze skoro nie modyfikujesz zmiennej value to mozesz dodac:
Matrix<T>& Matrix<T>::operator+=(const T& value )

1 użytkowników online, w tym zalogowanych: 0, gości: 1