przeciążanie operator << C++

przeciążanie operator << C++
MI
  • Rejestracja:prawie 11 lat
  • Ostatnio:prawie 9 lat
  • Postów:199
0

Cześć :)
Czytam sobie rozdział o serializacji w Qt noi wpadam na takie coś:
Autor definiuje wewnątrz klasy operator<< następująco:

Kopiuj
QDataStream& operator<<( QDataStream &s, const Record &r){}

Dotychczas, jeżeli chciałem przeciążać operator << to zawsze musiałem zaprzyjaźniać, dlatego, że jeżeli operator nie był zaprzyjaźniony i był zdefiniowany wewnątrz to jako lewostronny parametr << był brany this. Tutaj jest jakoś inaczej.
Proszę o wyprowadzenie mnie z błędu.

edytowany 1x, ostatnio: mielony
vpiotr
  • Rejestracja:ponad 13 lat
  • Ostatnio:prawie 3 lata
1

To jest globalny operator który nie musi być "przyjazny".
Lewą stroną jest pierwszy argument.
Ograniczenie - nie możesz dostać się do prywatnych pól.

http://msdn.microsoft.com/en-us/library/4x88tzx0.aspx

edytowany 1x, ostatnio: vpiotr
MarekR22
Moderator C/C++
  • Rejestracja:około 17 lat
  • Ostatnio:minuta
5

przyjaźń dla operatorów IMO jest zbędna. Ja wolę zawsze zdefiniować metodę do eksternalizacji, a potem użyć jej w inline'owym operatorze <<:

Kopiuj
class Record {
...
public:

    QDataStream &saveToDataStream(QDataStream &dataStream) const;
};

QDataStream& operator<<(QDataStream &s, const Record &r){
      return r.saveToDataStream(s);
}

Jeśli chcesz pomocy, NIE pisz na priva, ale zadaj dobre pytanie na forum.
_13th_Dragon
... są tez dodatkowe atuty tego rozwiązania ...

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.