Panel użytkownika
Nazwa użytkownika:
Hasło:
Nie masz jeszcze konta?

referencje w przeciążeniu operatorów - różnice

Ostatnio zmodyfikowano 2012-01-08 13:49
Autor Wiadomość
astro41
Temat założony przez niniejszego użytkownika
referencje w przeciążeniu operatorów - różnice
» 2012-01-08 10:32:41
Witam
Mam problem ze zrozumieniem różnicy w działaniu programu dla różnego zastosowania referencji.

Mam klasę
C/C++
class zwierze
{
public:
    int predkosc;
    zwierze operator +=( zwierze & zwierzak ); //tutaj będą4 warianty przeciążenia operatora
};
Przykładowo dla operatora += 4 możliwości z & w różnych miejscach
C/C++
zwierze zwierze::operator +=( zwierze & zwierzak )
{
    predkosc += zwierzak.predkosc;
}

zwierze & zwierze::operator +=( zwierze & zwierzak )
{
    predkosc += zwierzak.predkosc;
}

zwierze zwierze::operator +=( zwierze zwierzak )
{
    predkosc += zwierzak.predkosc;
}

zwierze & zwierze::operator +=( zwierze zwierzak )
{
    predkosc += zwierzak.predkosc;
}
i teraz

tworzymy dwa obiekty:
C/C++
zwierze zolw1;
zwierze zolw2;
zolw1.predkosc = 2;
zolw2.predkosc = 20;
wykorzystując przeładowany operator we wszystkich czterech wariantach
C/C++
zolw1 += zolw2;
nie widzę różnic w działaniu programu.

Jakie jest więc zastosowanie i czego ja tu nie rozumiem ?:)

Pozdrawiam
P-47560
pekfos
» 2012-01-08 12:34:10
C/C++
zwierze.zolw1 = 2;
zwierze.zolw2 = 20;
A to co?
P-47564
astro41
Temat założony przez niniejszego użytkownika
» 2012-01-08 12:56:41
Pomyłka :)

C/C++
zolw1.predkosc = 2;
zolw2.predkosc = 20;
P-47566
DejaVu
» 2012-01-08 13:33:13
Wiedzę o którą pytasz nie wynika ze znajomości operatorów tylko znajomości jak działa referencja.

PS. Cały ten kod jest niepoprawny.
P-47571
astro41
Temat założony przez niniejszego użytkownika
» 2012-01-08 13:41:22

Wiedzę o którą pytasz nie wynika ze znajomości operatorów tylko znajomości jak działa referencja.

Właśnie! Po to powstał ten temat :) Nie do końca rozumiem różnice w czterech przeładowaniach pokazanych wyżej. Rozumiem, że tworzymy referencję, aby działać bezpośrednio na obiekcie. Jeśli piszemy bez & to znaczy, że tworzymy lokalną kopię a konkretny obiekt nie ulega zmianie (?)
Bardzo prosiłbym o przykład/przykłady gdzie te przeładowania faktycznie różnią się zwracaną wartością, bardzo pomogłoby mi to w zrozumieniu tematu.

Pozdrawiam
 
P-47572
DejaVu
» 2012-01-08 13:49:33
C/C++
Klasa kopiaObiektu( Klasa & bla )
{
    return bla;
}

Klasa & oryginalnyObiekt( Klasa & bla )
{
    return bla;
}
Poczytaj lepiej o tych referencjach...
P-47575
« 1 »
  Strona 1 z 1