Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.

kaskadno preklapanje operatora +

[es] :: C/C++ programiranje :: C/C++ za početnike :: kaskadno preklapanje operatora +

[ Pregleda: 3181 | Odgovora: 9 ] > FB > Twit

Postavi temu Odgovori

Autor

Pretraga teme: Traži
Markiranje Štampanje RSS

fresh.bm

Član broj: 162156
Poruke: 182
*.broadband.blic.net.



+1 Profil

icon kaskadno preklapanje operatora +10.12.2008. u 23:44 - pre 186 meseci
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;


 
Odgovor na temu

deerbeer
Beograd

Član broj: 174418
Poruke: 1189
*.adsl-a-1.sezampro.yu.



+395 Profil

icon Re: kaskadno preklapanje operatora +11.12.2008. u 01:37 - pre 186 meseci
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 ; 


Viva lollapalooza
 
Odgovor na temu

fresh.bm

Član broj: 162156
Poruke: 182
*.broadband.blic.net.



+1 Profil

icon Re: kaskadno preklapanje operatora +11.12.2008. u 10:23 - pre 186 meseci
@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?
 
Odgovor na temu

karas

Član broj: 5574
Poruke: 482
62.189.100.*



+1 Profil

icon Re: kaskadno preklapanje operatora +11.12.2008. u 13:36 - pre 186 meseci
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;
}


Sveti Avgustin: "Dobar hrišćanin treba da se kloni matematičara i svih onih koji daju lažna proročanstva. Postoji opasnost da su matematičari već sklopili pakt sa Đavolom, da pomrače čovekov um i da ga okuju okovima pakla."
 
Odgovor na temu

EArthquake

Član broj: 20684
Poruke: 884
*.eunet.rs.



+67 Profil

icon Re: kaskadno preklapanje operatora +11.12.2008. u 20:06 - pre 186 meseci
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


 
Odgovor na temu

deerbeer
Beograd

Član broj: 174418
Poruke: 1189
*.ptt.yu.



+395 Profil

icon Re: kaskadno preklapanje operatora +12.12.2008. u 10:32 - pre 186 meseci
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 .


Viva lollapalooza
 
Odgovor na temu

DDMM
Dejan D. M. Milosavljevic
Danguba
Gajba, ali ne piva.

Član broj: 2544
Poruke: 89
*.static.sbb.rs.

Sajt: www.ddmrm.com


Profil

icon Re: kaskadno preklapanje operatora +12.12.2008. u 11:33 - pre 186 meseci
Code:

CTest operator+(const CTest& l, const CTest& r) 
 {
  CTest res;

  // ... ... ...

  return res; 
 }


X
 
Odgovor na temu

iggim
Ivan Milovanovic
Nis

Član broj: 29088
Poruke: 19
79.101.77.*



Profil

icon Re: kaskadno preklapanje operatora +19.12.2008. u 00:34 - pre 185 meseci
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=
 
Odgovor na temu

night-shift
Vukašin Sadžak
• Student FTN, • Software developer
• Futog/Novi Sad

Član broj: 17930
Poruke: 1213
93.86.173.*

Sajt: www.netolerancija.com


+8 Profil

icon Re: kaskadno preklapanje operatora +19.12.2008. u 02:52 - pre 185 meseci
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]
La parole est d'argent, mais le silence est d'or.
www.netolerancija.com
 
Odgovor na temu

DDMM
Dejan D. M. Milosavljevic
Danguba
Gajba, ali ne piva.

Član broj: 2544
Poruke: 89
*.static.sbb.rs.

Sajt: www.ddmrm.com


Profil

icon Re: kaskadno preklapanje operatora +19.12.2008. u 11:51 - pre 185 meseci
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.

X
 
Odgovor na temu

[es] :: C/C++ programiranje :: C/C++ za početnike :: kaskadno preklapanje operatora +

[ Pregleda: 3181 | Odgovora: 9 ] > FB > Twit

Postavi temu Odgovori

Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.