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

Preklapanje operatora <<

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

[ Pregleda: 1537 | Odgovora: 9 ]

Postavi temu Odgovori

Autor

Pretraga teme: Traži
Markiranje Štampanje RSS

karas

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



Profil

icon Preklapanje operatora <<13.09.2004. u 13:45
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."
13.09.2004. u 13:45 

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
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.
13.09.2004. u 14:04 

Dragi Tata

Član broj: 1958
Poruke: 3885
66.228.70.*

Sajt: www.novetehnologije.com


Profil

icon Re: Preklapanje operatora <<13.09.2004. u 14:17
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) { }


13.09.2004. u 14:17 

karas

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



Profil

icon Re: Preklapanje operatora <<13.09.2004. u 15:48
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."
13.09.2004. u 15:48 

Reljam
Relja Markovic
Seattle, WA

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

Sajt: www.linkedin.com/in/relja..


Profil

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

Dragi Tata

Član broj: 1958
Poruke: 3885
66.228.70.*

Sajt: www.novetehnologije.com


Profil

icon Re: Preklapanje operatora <<13.09.2004. u 16:19
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.
13.09.2004. u 16:19 

karas

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



Profil

icon Re: Preklapanje operatora <<13.09.2004. u 17:08
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."
13.09.2004. u 17:08 

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
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.

13.09.2004. u 17:57 

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
Koliko ja znam preklapanje opertatora << i >> se mora raditi sa friend funkcijama, zar ne ?
18.09.2004. u 16:52 

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
Ne mora.
Ako ti je potreban pristup članovima klase koji nisu public - koristiš friend.
Ovo važi kako za funkcije tako i za operatore.
18.09.2004. u 17:10 

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

[ Pregleda: 1537 | Odgovora: 9 ]

Postavi temu Odgovori

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