[ fresh.bm @ 10.12.2008. 23:44 ] @
Moze li se, i kako, preklopiti operator+ tako da vrsi kaskadno sabiranje instanci klase. Npr: Class Test { ... } Test rez,a,b,c; rez = a+b+c; |
[ fresh.bm @ 10.12.2008. 23:44 ] @
[ deerbeer @ 11.12.2008. 01:37 ] @
Code: CTest CTest:: operator + (const CTest& t) { ... return CTest (....) ; } CTest a,b,c ; a = b + c ; u f-ji vracas novi kreirani objekat dok za operator += bi trebao da vracas referencu na tekuci objekat Code: CTest& CTest:: operator += (const CTest& t) { ... return *this; } CTest a,b,c ; a += b + c ; [ fresh.bm @ 11.12.2008. 10:23 ] @
@deerbeer
da, tako sam uspio da realizujem i radi. Ali, ono sto mi pravi problem je kada napisem izraz clas a,b,c,d; a = b+c+d; Prijavljuje mi gresku, ne moze naci odgovarajuci operatopr + koji bi zadovoljio izraz. Kako u stvari izgleda poziv toj funkciji preklopljenog operator, moze li se i + realizovati da vraca referencu? I ima li to kakvog smisla, jer ipak, + bi trebalo da vraca novi objekat, kako si rekao. kako mogu napisati: int i = 7+8+12; Kako je taj + preklopljen? [ karas @ 11.12.2008. 13:36 ] @
Daj kod. Ovo npr. radi kako treba:
Code: #include <iostream> using namespace std; class My { private: int val; public: My() { val = 0; } My(int i) { val = i;} My operator+(const My& my) { My res; res.val = this->val + my.val; return res; } void print() { cout << val << endl; } }; int main() { My a(1), b(2), c(3), d(4); My r = a + b + c + d; r.print(); return 0; } [ EArthquake @ 11.12.2008. 20:06 ] @
Citat: fresh.bm: @deerbeer da, tako sam uspio da realizujem i radi. Ali, ono sto mi pravi problem je kada napisem izraz clas a,b,c,d; a = b+c+d; Prijavljuje mi gresku, ne moze naci odgovarajuci operatopr + koji bi zadovoljio izraz. Kako u stvari izgleda poziv toj funkciji preklopljenog operator, moze li se i + realizovati da vraca referencu? I ima li to kakvog smisla, jer ipak, + bi trebalo da vraca novi objekat, kako si rekao. kako mogu napisati: int i = 7+8+12; Kako je taj + preklopljen? ne bi smeo da vracas referencu , jer ako u toj metodi koja preklapa operator + napravis novi objekat koji cuva rezultat , nakon povratka iz metode on ce izaci iz opsega i biti obrisan moras vratiti novi objekat, problem je sto ce u vecini slucajeva raditi i ako vratis referencu na objekat koji je izasao iz opsega , pa se greska ne uoci odmah [ deerbeer @ 12.12.2008. 10:32 ] @
Citat: fresh.bm: @deerbeer da, tako sam uspio da realizujem i radi. Ali, ono sto mi pravi problem je kada napisem izraz clas a,b,c,d; a = b+c+d; Prijavljuje mi gresku, ne moze naci odgovarajuci operatopr + koji bi zadovoljio izraz. Kako u stvari izgleda poziv toj funkciji preklopljenog operator, moze li se i + realizovati da vraca referencu? I ima li to kakvog smisla, jer ipak, + bi trebalo da vraca novi objekat, kako si rekao. kako mogu napisati: int i = 7+8+12; Kako je taj + preklopljen? Preklapanje operatora je slicno kao i kod sabiranja obicnih brojeva: rezultat sabiranja je uvek novi broj tj. novi objekat . [ DDMM @ 12.12.2008. 11:33 ] @
Code: CTest operator+(const CTest& l, const CTest& r) { CTest res; // ... ... ... return res; } [ iggim @ 19.12.2008. 00:34 ] @
Citat: fresh.bm: @deerbeer da, tako sam uspio da realizujem i radi. Ali, ono sto mi pravi problem je kada napisem izraz clas a,b,c,d; a = b+c+d; Prijavljuje mi gresku, ne moze naci odgovarajuci operatopr + koji bi zadovoljio izraz. Kako u stvari izgleda poziv toj funkciji preklopljenog operator, moze li se i + realizovati da vraca referencu? I ima li to kakvog smisla, jer ipak, + bi trebalo da vraca novi objekat, kako si rekao. kako mogu napisati: int i = 7+8+12; Kako je taj + preklopljen? clas a=b+c+d; bi trebalo da radi.. a ako hoces da pises: clas a,b,c,d; a=b+c+d; trebas da preklopis i operator= [ night-shift @ 19.12.2008. 02:52 ] @
Ukoliko se menjaju podaci članova klase, koriste se metode, u suprotnom friend funkcije:
Code: class Complex { ... friend Complex operator +(const Complex& z1, const Complex& z2) { return Complex(z1.real+z2.real, z1.imag+z2.imag); } Complex& operator +=(const Complex& z) { real+=z.real; imag+=z.imag; return *this; } friend bool operator ==(const Complex& z1, const Complex& z2) { return ((z1==z2.real) && (z1.imag==z2.imag)); } Complex& operator =(const Complex& z) { real=z.real; imag=z.imag; return *this; } ... }; [Ovu poruku je menjao night-shift dana 19.12.2008. u 04:08 GMT+1] [ DDMM @ 19.12.2008. 11:51 ] @
Citat: iggim: clas a=b+c+d; bi trebalo da radi.. a ako hoces da pises: clas a,b,c,d; a=b+c+d; trebas da preklopis i operator= Nije potrebno ( 12.8-10 ) Sve zavisi od same klase. Copyright (C) 2001-2024 by www.elitesecurity.org. All rights reserved.
|