przeciążanie operator << C++

przeciążanie operator << C++
MI
  • Rejestracja: dni
  • Ostatnio: dni
  • 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.

vpiotr
  • Rejestracja: dni
  • Ostatnio: dni
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

MarekR22
  • Rejestracja: dni
  • Ostatnio: dni
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);
}

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.