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

Logika przeciazania operatorow

Ostatnio zmodyfikowano 2012-10-05 21:29
Autor Wiadomość
diego997
Temat założony przez niniejszego użytkownika
Logika przeciazania operatorow
» 2012-10-05 19:31:37
Czesc mam pytanie czy wy potraficie swobodnie poslogiwac sie operatorami widzicie w tym logike ? Przez przypadek zaczalem sobie czytac 2 tom Grebosza ;p zaczalem od operatorow. Grebosz staral sie to wytlumaczyc dla ponizszego przypadku mniej wiecej tak:

C/C++
class Klasa
{
    int a;
public:
    Klasa operator +( Klasa K1, Klasa K2 );
   
};

int main()
{
    Klasa A, B, C;
   
    C = A + B;
}

Ze pierwszy parametr funkcji operator+ odnosi sie do A natomiast drugi do B, ok. A co w takim przypadku:

C/C++
//.....
void operator +( Klasa K1 );
//.....
int main()
{
    Klasa A, B;
    A + B;
}
Analogicznie powinno byc ze A to pierwszy parametr natomiast B ? Moze mi ktos to wytlumaczyc ?

P-66114
m4tx
» 2012-10-05 19:46:55
Porównaj to sobie tak:
C/C++
int main()
{
    int A = 0;
    int B = 10;
    A + B;
}

Czyli, inaczej mówiąc - w teorii coś może się dziać, w praktyce nie dzieje się nic :) Ofc. może się coś jednak sensownego wydarzyć, ale to już zależy od implementacji przeciążenia operatora.
P-66115
DejaVu
» 2012-10-05 19:53:39
Sprawdziłeś czy ten kod się kompiluje? Operator dodawania o ile mi wiadomo inaczej się przeciąża w klasie...
P-66116
Mrovqa
» 2012-10-05 19:58:09
...i o ile mi wiadomo to ten poza klasą też inaczej się przeciąża...
P-66117
diego997
Temat założony przez niniejszego użytkownika
» 2012-10-05 20:20:37
Ja nie moge po prostu pojac do do ktorego obiektu odnosi sie this-> a do ktorego przeslany argument. Moze to sobie trzeba zapamietac i tyle ;p
P-66118
DejaVu
» 2012-10-05 20:31:23
C/C++
class A
{
public:
    void metoda( int x );
};

A a;
a.metoda( 123 );
Obiekt 'a' wywołuje metodę i pracuje na otrzymanych danych.
C/C++
class B
{
public:
    B & operator +=( int x );
};

B b;
b += 123;
Obiekt 'b' wywołuje metodę (która jest operatorem) i otrzymuje ZAWSZE jedną daną wejściową (nie ważne, czy to liczba, czy też inny obiekt).

Jeżeli będzie to 'operator +', to:
C/C++
class C
{
public:
    C operator +( int x );
};

C c;
c + 123;
Obiekt 'c' wywoła 'operator +' z wartością '123', zwróci jego kopię (bo nie ma referencji), a następnie kopia zostanie zniszczona oraz wynik nie zostanie nigdzie zapisany (bo nie było z lewej operacji przypisania).

PS. Od 'ZAWSZE' są wyjątki, które dotyczą operatorów inkrementacji i dekrementacji.

PSS. Zdaję sobie sprawę, że trochę chaotyczną odpowiedź dałem, jednak dzisiaj chyba nie mam dnia do pisania...
P-66120
diego997
Temat założony przez niniejszego użytkownika
» 2012-10-05 20:43:44
Super wyjasniles ale nie do konca rozumie wyjasnienie odnosnie operator +. Napisales ze obiekt zwroci kopie. Czyli w takim przypadku nie zwroci kopii:

C/C++
Klasa & operator +( int k );

czy w takim:

C/C++
Klasa operator +( Klasa & Obj );


Bo jezeli chodzi o pierwszy przypadek to nie do konca go rozumie, wedlug mnie on zwraca adress kopii. Czy ta referencja z przodu znaczy rowniez to samo co podana w nawiasie ?
P-66125
DejaVu
» 2012-10-05 20:45:24
Tak. Co do operatora + i referencji... aż tak dobrze nie znam standardu i zazwyczaj jak czegoś pewien nie jestem to piszę krótki kod do przetestowania zachowania :)

/edit:
Napisałem przykład: http://cpp0x.pl/dokumentacja/standard-C++ /Przeciazanie-operatorow/operator+/1512
P-66126
« 1 » 2
  Strona 1 z 2 Następna strona