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

Preklapanje operatora - zašto

[es] :: C/C++ programiranje :: Preklapanje operatora - zašto

[ Pregleda: 1556 | Odgovora: 1 ] > FB > Twit

Postavi temu Odgovori

Autor

Pretraga teme: Traži
Markiranje Štampanje RSS

azzpoz

Član broj: 300637
Poruke: 96



+1 Profil

icon Preklapanje operatora - zašto14.11.2013. u 21:35 - pre 127 meseci
UNUTAR KLASE
Code:
friend ostream &operator<<(ostream &COUT, NizInt &obj);


VAN KLASE
Code:
ostream &operator << (ostream &COUT, NizInt &obj)
{
        for(int i=0;i<obj._trenutno;i++)
                cout<<" "<<obj._niz[i];

        return COUT;
}





std::ostream& NizInt::operator<<(std::ostream&, NizInt&)' must take exactly one argument
// <<< greška


Zašto mi se javlja greška ukoliko pokušam da operator preklapanja postavim unutar klase, tj. zašto mora biti "globalna" funkcija, definicija operatora???
 
Odgovor na temu

Burgos
Nemanja Borić
Amazon Web Services
Berlin

Član broj: 12484
Poruke: 1947
..106.109.adsl.dyn.beotel.net.

Sajt: stackoverflow.com/users/1..


+480 Profil

icon Re: Preklapanje operatora - zašto14.11.2013. u 22:02 - pre 127 meseci
Ako imaš izraz

Code:
cout << obj


to se interpretira kao:

Code:
cout.operator<<(obj);


dakle - pokušava se sa pozivom operator<< nad objektom cout (ovaj: http://www.cplusplus.com/refer...stream/ostream/operator%3C%3C/), a ne tvoj operator. Dakle, moraš ovaj operator postaviti kao funkciju ne-članicu klase.

Slična stvar je i sa:

Code:

class X
{
    // ...
    int operator+(int j) { return m_vrednost + j; }
};

X x;
int res = 10 + x; // NE RADI - mora operator+(int j, conts X& x) 



Takođe, pročitaj ovaj članak Scott Meyers-a, u kome je opisano da zapravo ovakve funkcije ne ruše enkapsulaciju:

http://www.drdobbs.com/cpp/how...ions-improve-encapsu/184401197

A što se tiče tačno tvoje greške:

Code:
std::ostream& NizInt::operator<<(std::ostream&, NizInt&)' must take exactly one argument // <<< greška


binarni operator uzima dva operanda. Ako je funkcija članica klase, prvi operand je skriveni this pokazivač - dakle, možeš specificirati još samo najviše jedan operand, npr:

Code:
void NizInt::operator<<(int k);



 
Odgovor na temu

[es] :: C/C++ programiranje :: Preklapanje operatora - zašto

[ Pregleda: 1556 | Odgovora: 1 ] > FB > Twit

Postavi temu Odgovori

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