Logika przeciazania operatorow
Ostatnio zmodyfikowano 2012-10-05 21:29
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: 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: 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 ? |
|
m4tx |
» 2012-10-05 19:46:55 Porównaj to sobie tak: 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. |
|
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... |
|
Mrovqa |
» 2012-10-05 19:58:09 ...i o ile mi wiadomo to ten poza klasą też inaczej się przeciąża... |
|
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 |
|
DejaVu |
» 2012-10-05 20:31:23 class A { public: void metoda( int x ); };
A a; a.metoda( 123 );
Obiekt 'a' wywołuje metodę i pracuje na otrzymanych danych. 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: 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... |
|
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: Klasa & operator +( int k );
czy w takim: 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 ? |
|
DejaVu |
» 2012-10-05 20:45:24 |
|
« 1 » 2 |