Novo

Forum kao aplikacija na telefonu

Dodajte forum na početni ekran i koristite ga kao aplikaciju, sa menijem na dnu ekrana.

  • 1 odgovor
  • 2.093 pregleda

Najnovija ↓

Preklapanje operatora - zašto 14.11.2013. u 22:35 · pre 157 meseci #1
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???
Re: Preklapanje operatora - zašto 14.11.2013. u 23:02 · pre 157 meseci #2
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);



Sviđa mi se1
Prijavite se da biste odgovorili u ovoj temi.PrijavaRegistracija

Premeštanje teme