Przeładowanie operatora += nie działa.

0

Chce dodać dwie zmienne typu Number, ale zmienna num1 nie zmiania swojej wartości.

https://ideone.com/8W968p

Próbowałem też coś w stylu:

Number operator+=(const Number& toAdd) const
{
    Number temp(ConvertFromNumber()+toAdd.ConvertFromNumber());
    return temp;
}

Podejrzewam, że to coś głupiego, ale nie mam pojecia co. Dzieki za pomoc

2
Number & operator+=(const Number& toAdd) 
{
...
  return *this;
}
0

Tak jak Ci powyżej napisał, Wykonaj dodawanie, z this i toAdd i Zwróć *this.

0
Bartłomiej Golenko napisał(a):
Number & operator+=(const Number& toAdd) 
{
...
  return *this;
}

Czyli moge zmodyfikować obiekt, ale nie moge go zastąpić innym obiektem ?

0

+= sam w sobie nie ma żadnego magicznego znaczenia, które powodowałoby zmodyfikowanie lewego argumentu. Pamiętaj, że

a += b

jest równoważne wywołaniu funkcji

a.operator+= (b);
// ^^^^^^^^^--- to całe jest nazwą funkcji

Jeśli += ma zmodyfikować lewy argument, to musi to też robic w wywołaniu "równoważnym".

0
JozekPL napisał(a):

Czyli moge zmodyfikować obiekt, ale nie moge go zastąpić innym obiektem ?

Nie wiem czy nie możesz, ale założenie jest takie że += modyfikuje własny obiekt (*this) i go zwraca.
Dlatego też operator nie powinien mieć na końcu const, bo jak niby chcesz dodać coś do obiektu, czyli go zmodyfikować, skoro jest on stały...

Kompilator co prawda pozwoli na zdefiniowanie operatora o niestandardowym nagłówku czy o bardzo dziwnym działaniu, ale to raczej na wypadek kiedy programista dobrze wie co chce zrobić.

0

To chyba nie na moją głowe.. chciałem za wszelką cenę stworzyć nowy obiekt, żeby użyć kontruktora i zwrócić ten obiekt, by zastąpił to co jest po lewej. No nic, zrobie to jakoś inaczej, dzięki za pomoc

1

Możesz tak zrobić przy zapisie
a = a+b;

Ale to nie to samo co
a += b;

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