http://ideone.com/4MUU9H
class A
{
public:
friend istream& operator>>(istream&, A&);
friend ostream& operator<<(ostream&, const A&);
private:
int x;
};
istream& operator>>(istream& i, A& a)
{
return i >> a.x;
}
ostream& operator<<(ostream& o, const A& a)
{
return o << a.x;
}
Niestety operatory strumieni nie moga sie znalezc jako skladowe klasy, wiec musimy uzyc drobnej kombinacji z deklaracja przyjazni. Kopiujemy naglowek funkcji operatora do klasy i wstawiamy przed nim slowko "friend" "f-r-i-e-n-d". Pozwala to operatorowi na korzystanie ze skladowych prywatnych danej klasy. Co wiecej mozna zrobic jeszcze jeden podobny hack z dodaniem publicznej metody realizujacej dzialanie operatora i w samym operatorze wywolac po prostu ta metode. Tworca niestety tego jakze pieknego jezyka postanowil stworzyc przeciazanie kazdego operatora w inny sposob. Co wiecej deklaracja przyjazni nie sprawia, ze funkcja czy klasa (bo jak sie zapewne dowiesz, ktoregos pieknego dnia, mozna tez uzywac slowa kluczowego "friend" dla innych klas) staje sie "skladowa" (uwaga, tutaj uzyto troche zargonu, znaczy to, ze dany obiekt nie sklada sie na klase (jest oddzielnym bytem)). Moze Ci to troche utrudnic sprawe, ale warto to naprawde zapamietac, poniewaz kiedys jak poznasz juz szablony, bedziesz mial znowu problem z tymi operatorami. To chyba bylo na tyle, jak jeszcze nie zrozumiales drogi autorze tych 6 linijek kodu, zachecam do zadawania pytan, z checia napisze kolejne wypracowanie na ten temat, ktore osobiscie uwazam, ze jest bezsensowne, ale dla niektorych post bez nich jest postem straconym. Zycze oczywiscie milego dnia! :)