[ 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;


[ 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.