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

 ( Koli | 2008. november 21., péntek - 13:30 )

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ás megjelenítési lehetőségek

A választott hozzászólás megjelenítési mód a „Beállítás” gombbal rögzíthető.

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

Köszönöm, műlködik :)

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

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

Ezt érdemes olvasgatni:

http://www.mindview.net/Books/TICPP/ThinkingInCPP2e.html

Ingyen letölthető html-ben.

Ezen belül van egy fejezet, ami konkrétan megvalósítja az összes operátort egyszerű pépldák segítségével.

Onnan copy-paste :-)

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

sikerült csak szintaktikai hiba volt benne..:P

Az elozo kommentedben is: logikai kifejezesre
--

()=() Ki oda vagyik,
('Y') hol szall a galamb
C . C elszalasztja a
()_() kincset itt alant.

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