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
- 1877 megtekintés
Hozzászólások
ostream& operator << (ostream& out, const Betu& b)
{
return out << b.a;
}
- A hozzászóláshoz be kell jelentkezni
Köszönöm, műlködik :)
- A hozzászóláshoz be kell jelentkezni
Ugyan ezt megírja valaki < -re is?(kissebb nagyobb jelre?)
- A hozzászóláshoz be kell jelentkezni
bool operator < (const Betu& a, const Betu& b)
{
return a.a < b.a;
}
- A hozzászóláshoz be kell jelentkezni
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 :-)
- A hozzászóláshoz be kell jelentkezni
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
- A hozzászóláshoz be kell jelentkezni
sikerült csak szintaktikai hiba volt benne..:P
- A hozzászóláshoz be kell jelentkezni
Az elozo kommentedben is: logikai kifejezesre
--
()=() Ki oda vagyik,
('Y') hol szall a galamb
C . C elszalasztja a
()_() kincset itt alant.
- A hozzászóláshoz be kell jelentkezni
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
- A hozzászóláshoz be kell jelentkezni