Wielokrotne przypisanie a zwracanie referencji przez operator

0

Mam mały problem ze zrozumieniem tego co się dzieje w czasie wielokrotnego przypisania. Załóżmy, że mamy taki kod:

 
class A {
private:
    int x;
    int y;
public:
    A(int _x, int _y) : x(_x), y(_y) {}
    A operator=(A &obj) {
        x = obj.x;
        y = obj.y;
        
        return obj;
    }
    void wypisz() {
        cout << x << ' ' << y;        
    }
};
 
int main() {
    A obj1(5, 6);
    A obj2(4, 3);
    A obj3(9, 0);
    
    obj1 = (obj2 = obj3);

    return 0;    
}

Kompilator wyrzuca błąd jakoby nie była znana konwersja z A na A&, ale przecież tak działa referencja:
typ &zmienna = wartosc; // wartosc jest typu typ

Byłbym bardzo wdzięczny za pomoc w rozwianiu moich wątpliwości, spędza mi to sen z powiek

1

Operator przypisania powinien wyglądać tak:

A &operator=(const A &obj) {
  // ... costam

  return *this;
}

Teraz robisz coś dziwnego. Zwracasz w ogóle nie to co trzeba i to przez wartość. Albo musisz zwracać referencję albo dopisać const w argumencie - wtedy Twój kod zadziała, ale raczej nie tak, jak chciałeś, żeby działał. Najlepiej postąpić zgodnie ze sztuką i operator implementować tak, jak napisałem wyżej.

0
private:
    int x;
    int y;

taka klasa w ogóle nie wymaga operatora przypisania, domyślny będzie działał prawidłowo.

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