operátor írás-hogy is kell azt?

Fórumok

Sziasztok!
egy egyszerű kiíró operátort szeretnék írni, de nem tudom hogy kell...
Segítenétek?Itt van hozzá egy alap:


#include < iostream>
using namespace std;

class Betu{
public:
int a;
Betu(int a):a(a){}
ostream& operator << (ostream& out);

};
ostream& Betu::operator << (ostream& out)
{
out<< a;
return out;
}

int main()
{
int b=4;
Betu c(b);
cout<< c;
return 0;
}

Hol van benne a hiba? Hogy kell csinálni?
Köszi:Kolos

Hozzászólások

ostream& operator << (ostream& out, const Betu& b)
{
return out << b.a;
}

Ugyan ezt megírja valaki < -re is?(kissebb nagyobb jelre?)

kissebb nagyobbra sikerült de csak Betu tipusra, viszont logikai kifelyezésre nem megy...(és abban a két bazinagy könyvben sem találom...) bool-ként hogy kell megírni?
Köszi:Kolos

Operátorok felülbírálására általában rögtön két lehetőséged van:
- tagfv-ként
- külső (gyakran barát) fv-ként

TagFv:


// .h
class A
{
public:
   A(int i);
...
   bool operator < (const A& b);
...
private:
   int data;
};

// .cpp
bool A::operator < (const A& b)
{
   return this->data < b.data;
}

Mint látod csak egy paramétert kap, mert az operátor másik paramétere a this. Méghozzá "a < b" esetén mindig az "a" lesz a this.
Ezt az alakot leginkább "=","+=", stb esetben szokták használni, de lehet bármikor.
Az ostream ilyen megadásának az lenne a hibája, hogy a "cout << a" a cout-ban keresné az "operator <<"-t ami ugye nem létezik A típusra, az "a << cout" találná meg ezt, ami viszont elég hülyén nézne ki...

Külső fv:


// .h
class A
{
public:
   A(int i);
...
   friend bool operator < (const A& b,const A& b);
...
private:
   int data;
};

// .cpp
bool operator < (const A& b,const A& b)
{
   return a.data < b.data;
}

Két paraméter, külső fv.
Az osztályban csak azért kell megadni, mert friend, és így eléri a privát "data" adattagot. Ez nem kötelező, de általában kényelmesebb.
Ezzel a verzióval olyan típushoz is írhatsz túlterhelt operátort, amit nem te írtál és/vagy nem tudsz hozzányúlni. Persze olyankor friend sincs...

(Mindenhol const referenciát használtam, mert az gyorsabb mint az érték szerinti átadás)

"...handing C++ to the average programmer seems roughly comparable to handing a loaded .45 to a chimpanzee."
-- Ted Ts'o