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

Przeciążanie operatorów na przykładzie operator +=

Ostatnio zmodyfikowano 2012-09-09 13:31
Autor Wiadomość
diego997
Temat założony przez niniejszego użytkownika
Przeciążanie operatorów na przykładzie operator +=
» 2012-09-07 18:48:33
C/C++
class v3d
{
public:
    int liczba;
    v3d & operator +=( int ); //1*
    //operator+=(int); //2*
   
}

v3d & v3d::operator +=( int value )
{
    this->liczba += value; //4*
    cout << this << endl;
    return * this; //3*
}

Nie rozumie do końca jak działają operatory co w nich się dzieje, dlaczego w 1* muszę na końcu zwracać wkaznik this 3*, a nie mogę np napisać samego 2*?

4* - co się w ogóle dzieje w tym miejscu ?
P-64520
DejaVu
» 2012-09-07 19:25:44
Co do zwracania wartości - zwracasz referencję na obiekt, a nie wskaźnik na obiekt. Zmienna this zwraca wskaźnik na obiekt, a Ty potrzebujesz referencję, stąd zapis
* this
.

/edit:
Co do rozumienia/nierozumienia - taka jest z góry ustalona konstrukcja operatorów i trzeba ją zaakceptować.

Tu masz kilka przykładów przeciążania operatorów: » standard C++Przeciążanie operatorów.
P-64525
diego997
Temat założony przez niniejszego użytkownika
» 2012-09-07 19:51:17
czyli:

C/C++
return * this;

Nie odnosi się do obiektów znajdujących się po lewej stronie ? Po prostu się to zwraca i tyle ?








EDIT: Nie rozumie tego:

C/C++
class klasa
{
    int liczba;
public:
    klasa & operator =( klasa & );
   
};

klasa & klasa::operator =( klasa & obj )
{
    this->liczba = obj; //Czemu to nie wystarczy
    return * this; //Tutaj
}

Po co mamy zwracać jeszcze tą referencję ? Tak ma byc i z tym się nie dyskutuje ?
P-64528
Mrovqa
» 2012-09-07 20:18:58
Po co mamy zwracać jeszcze tą referencję ? Tak ma byc i z tym się nie dyskutuje ?
Gdyby nie było referencji, to nie mógłbyś "kaskadowo" przypisywać, tzn. zapis
a = b = c;
 byłby niepoprawny.

@down nie doczytałem tego
* this
, myślałem, że autorowi chodzi o
void
, mój błąd.
P-64530
DejaVu
» 2012-09-07 20:20:21
Zapis byłby poprawny, jednak nie działałby zgodnie z oczekiwaniami.
P-64531
diego997
Temat założony przez niniejszego użytkownika
» 2012-09-07 20:58:14
Moglibyście mi tylko powiedzieć jaka różnica jest między tym:

C/C++
klasa & operator +( klasa & );

A tym

C/C++
klasa operator +( klasa & );

P-64534
DejaVu
» 2012-09-07 21:20:20
A jaka jest różnica między argumentem przekazanym przez referencję i bez referencji?
P-64538
Mrovqa
» 2012-09-07 21:22:23
Jeżeli zwracasz obiekt, to jest on kopiowany i trochę to trwa. Natomiast przy zwracaniu referencji, zwracamy TEN SAM obiekt, a nie jego kopię. Referencja jest po prostu szybsza.
P-64539
« 1 » 2 3
  Strona 1 z 3 Następna strona