Przeciążanie operatorów - potrzebny przykład definicji np. operatora '+'

2013-12-01 22:43

Rejestracja: 7 lat temu

Ostatnio: 5 miesięcy temu

0

Witam mam do napisania taki oto program:

Zdefiniuj klasę LZesp reprezentującą liczbę zespoloną. Klasa powinna posiadać pola prywatne re -
część rzeczywista i im – część urojona oraz konstruktor ustawiający pola klasy na podstawie parametrów,
domyślnie wartości 0. Dla klasy należy przeciążyć następujące operatory:

  • operatory: +, -, *, /;
  • operator pobierania/wstawiania ze/do strumienia wejściowego/wyjściowego >>, <<,
  • operatory: +=, -=, *=, /=;
  • operatory: <, >, = =;
    Napisz program ilustrujący działanie zaimplementowanej klasy i metod.

W sumie wydawałby się banalny gdyby nie to przeciążanie operatorów.. Mógłby Ktoś podać jakaś przykładową definicję np operatora +? Zapewne reszta jest analogiczna i bym sobie z nimi dalej poradził..

Pozostało 580 znaków

2013-12-01 22:54

Rejestracja: 14 lat temu

Ostatnio: 2 minuty temu

1
complex complex::operator+(const complex &c)const { return complex(re+c.re,im+c.im); }

Wykonuję programy na zamówienie, pisać na Priv.
Asm/C/C++/Pascal/Delphi/Java/C#/PHP/JS oraz inne języki.
edytowany 2x, ostatnio: _13th_Dragon, 2013-12-01 22:55
Przeładowywanie operatora+ wewnątrz klasy jest niekorzystne jeśli chcemy aby działał on w przypadku innych typów - 1+complex(0,1) w Twoim przypadku nie zadziała. - kq 2013-12-01 22:58
@kq - przykro mi ale to co napisałeś to są totalne bzdury. To znaczy nie zupełnie bzdury tylko niepoprawne zrozumienie tego co ktoś powiedział lub napisał. - _13th_Dragon 2013-12-01 23:00
Bzdury? Twoje rozwiązanie: http://ideone.com/B3o5c0 i moje: http://ideone.com/HE6Qtc operator+ zdefiniowany wewnątrz klasy wymusza aby lewa strona była tego typu, dlatego popularnym idiomem jest implementacja operatora+ w kontekście operatora+=, którego implementacja wewnątrz klasy jest ok. - kq 2013-12-01 23:06
Heh, to musisz chyba ściślej się wyrażać lub mówić od razu z przykładami ;P Albo przynajmniej dopisz że chodzi o odblokowanie konwersji przez konstruktor, czy jakoś tak. - _13th_Dragon 2013-12-01 23:16
Fakt, mogłem to lepiej ująć, ale przykład zamieściłem już w pierwszym komencie. No cóż, człowiek uczy się całe życie :) Nie jestem przyzwyczajony do używania polskiego nazewnictwa. - kq 2013-12-01 23:18

Pozostało 580 znaków

kq
2013-12-01 22:57
kq
Moderator C/C++

Rejestracja: 6 lat temu

Ostatnio: 4 godziny temu

Lokalizacja: Szczecin

Powinieneś przeładować operator+ w kontekście operatora+=

czyli

Klasa
{
    Klasa& operator+=(Klasa const& rhs)
    {
    // ...
    return *this;
    }
}

i operator+ poza klasą, ale w tej samej przestrzeni nazw:

Klasa operator+(Klasa lhs, Klasa const& rhs)
{
    return lhs += rhs;
}

Lektura: http://en.cppreference.com/w/cpp/language/operators


Pokaż pozostałe 5 komentarzy
przecież przy zwykłym Klasa a,b,c; c = a + b; to zmasakruje wartość b :-| - Azarien 2013-12-03 01:53
W jaki sposób? - kq 2013-12-03 01:54
miało być "zmasakruje wartość a" - Azarien 2013-12-03 01:56
dobra, też idę spać. - Azarien 2013-12-03 01:56
Ponownie, w jaki sposób? Przecież lhs jest brane przez kopię, nie referencję... - kq 2013-12-03 01:56

Pozostało 580 znaków

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