Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.

Preklapanje operatora <<

[es] :: C/C++ programiranje :: Preklapanje operatora <<

[ Pregleda: 3104 | Odgovora: 9 ] > FB > Twit

Postavi temu Odgovori

Autor

Pretraga teme: Traži
Markiranje Štampanje RSS

karas

Član broj: 5574
Poruke: 482
*.90.EUnet.yu



+1 Profil

icon Preklapanje operatora <<13.09.2004. u 13:45 - pre 208 meseci
Sledecci kod

Code:

#include <iostream>

using namespace std;

class A
{
  string s;

 public:
  A(void) { }
  A(const string& str) : s(str) { }
  A(const A& a) : s(a.s) { }
  ~A(void) { }
  ostream& operator<<(ostream& os) { os << s; return os; }
};

int main(void)
{
  A a("Hello, World!\n");
  cout << a;
}


ne mozze da se prevede, ali ako se operator<< napishe kao prijateljska funkcija, onda prethodni kod radi.
Takodje, ako se u main() umesto cout << a; stavi a.operator<<(cout), onda prethodni kod radi.
Zashto?
Sveti Avgustin: "Dobar hrišćanin treba da se kloni matematičara i svih onih koji daju lažna proročanstva. Postoji opasnost da su matematičari već sklopili pakt sa Đavolom, da pomrače čovekov um i da ga okuju okovima pakla."
 
Odgovor na temu

sspasic
Sasa Spasic

Član broj: 3261
Poruke: 175
*.medianis.net

Jabber: sspasic@elitesecurity.org
ICQ: 35454521


Profil

icon Re: Preklapanje operatora <<13.09.2004. u 14:04 - pre 208 meseci
Code:

ostream& operator<<(ostream& os) { os << s; return os; }

u stvari preklapa:
Code:

a << cout;


To što želiš možeš da postigneš samo funkcijom koja nije članica klase.
 
Odgovor na temu

Dragi Tata
Malo ispod Kanade

Član broj: 1958
Poruke: 3906
66.228.70.*



+6 Profil

icon Re: Preklapanje operatora <<13.09.2004. u 14:17 - pre 208 meseci
Upravo tako.
Code:
operator << 

je ili član klase ostream ili slobodna funkcija.

Uzgred, zašto si pisao svoj konstruktor za kopiranje i destruktor koji ne radi ništa? Mislim na ovaj deo:
Code:

 A(const A& a) : s(a.s) { }
 ~A(void) { }


 
Odgovor na temu

karas

Član broj: 5574
Poruke: 482
*.86.EUnet.yu



+1 Profil

icon Re: Preklapanje operatora <<13.09.2004. u 15:48 - pre 208 meseci
Zashto << ne mozze da bude chlanica klase? Mogu +, -, itd. ne vidim zashto je << poseban.
Ovde sam bezveze stavio konstruktore i destruktor, a inache ih uvek stavljam (i operator=) chak i kad su prazni, tek da ne pustim da prevodilac radi po svome.

Sveti Avgustin: "Dobar hrišćanin treba da se kloni matematičara i svih onih koji daju lažna proročanstva. Postoji opasnost da su matematičari već sklopili pakt sa Đavolom, da pomrače čovekov um i da ga okuju okovima pakla."
 
Odgovor na temu

Reljam
Relja Markovic
San Francisco

Član broj: 531
Poruke: 1793
*.client.comcast.net



+18 Profil

icon Re: Preklapanje operatora <<13.09.2004. u 15:52 - pre 208 meseci
Nije << specijalan, nego operatori koji su memberi moraju da vrate referencu na svoj tip. Znaci << treba da vrati A&, a ne ostream&.
 
Odgovor na temu

Dragi Tata
Malo ispod Kanade

Član broj: 1958
Poruke: 3906
66.228.70.*



+6 Profil

icon Re: Preklapanje operatora <<13.09.2004. u 16:19 - pre 208 meseci
Citat:
karas: Ovde sam bezveze stavio konstruktore i destruktor, a inache ih uvek stavljam (i operator=) chak i kad su prazni, tek da ne pustim da prevodilac radi po svome.


Zanimljivo je da sam naletao na takve savete kad sam učio C++ pre skoro 10 godina. Verovatno su tad kompajleri bili lošiji. Danas je filozofija drugačija: ako će kompajler nešto da odradi za tebe, pusti ga - u 99% slučajeva će to da uradi bolje nego ti ili bar isto.
 
Odgovor na temu

karas

Član broj: 5574
Poruke: 482
*.76.eunet.yu



+1 Profil

icon Re: Preklapanje operatora <<13.09.2004. u 17:08 - pre 208 meseci
Jasno, hvala na savetima.
Sveti Avgustin: "Dobar hrišćanin treba da se kloni matematičara i svih onih koji daju lažna proročanstva. Postoji opasnost da su matematičari već sklopili pakt sa Đavolom, da pomrače čovekov um i da ga okuju okovima pakla."
 
Odgovor na temu

sspasic
Sasa Spasic

Član broj: 3261
Poruke: 175
*.medianis.net

Jabber: sspasic@elitesecurity.org
ICQ: 35454521


Profil

icon Re: Preklapanje operatora <<13.09.2004. u 17:57 - pre 208 meseci
Citat:

Zashto << ne mozze da bude chlanica klase?

Pazi, kada preklopiš operator u klasi A a argument je tipa B ti si preklopio A op B.
Tebi je u cout << a sa leve strane objekat klase koju ne bi trebalo da menjaš.
Kada možeš da menjaš klasu sa leve strane onda možeš da koristiš funkcije članice.

 
Odgovor na temu

Djuki
Djurdjevac Ivan
Pancevo

Član broj: 56
Poruke: 171
*.panet.co.yu

Jabber: djuki_mag@elitesecurity.org
ICQ: 66867882


Profil

icon Re: Preklapanje operatora <<18.09.2004. u 16:52 - pre 208 meseci
Koliko ja znam preklapanje opertatora << i >> se mora raditi sa friend funkcijama, zar ne ?
 
Odgovor na temu

sspasic
Sasa Spasic

Član broj: 3261
Poruke: 175
*.medianis.net

Jabber: sspasic@elitesecurity.org
ICQ: 35454521


Profil

icon Re: Preklapanje operatora <<18.09.2004. u 17:10 - pre 208 meseci
Ne mora.
Ako ti je potreban pristup članovima klase koji nisu public - koristiš friend.
Ovo važi kako za funkcije tako i za operatore.
 
Odgovor na temu

[es] :: C/C++ programiranje :: Preklapanje operatora <<

[ Pregleda: 3104 | Odgovora: 9 ] > FB > Twit

Postavi temu Odgovori

Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.