Przeciążenie operatora wyjscia

0

Witam chciałbym się od was dowiedzieć dlaczego przeciążenie operatora wyjścia musi być zadeklarowana jako przyjaciel klasy, a nie jako metoda tej właśnie klasy ?
Przecież w drugim wypadku funkcja też będzie miała dostęp do prywatnych pól klasy.

1

dlaczego przeciążenie operatora wyjścia musi być zadeklarowana jako przyjaciel klasy
Nie musi. Wystarczy, że ma dostęp do potrzebnych bebechów klasy. Ale najczęściej taki dostęp jest możliwy jedynie przez przyjaźń.

a nie jako metoda tej właśnie klasy?
Żeby zapis był naturalny. Jeżeli zadeklarujesz operator jako metodę klasy, to potem będziesz go tak używał

obiekt << strumien

bo to jest to samo co

obiekt.operator<<(strumien)

A chcesz odwrotny zapis (bo jest zgodny z konwencją biblioteki standardowej)

strumien << obiekt

który jest równoważny

strumien.operator<<(obiekt)

lub

operator<<(strumien, obiekt)

Jeśli chcesz by strumień był po lewej stronie operatora, to albo

  1. przeciążasz operator<< dla strumienia, który przyjmuje obiekt Twojej klasy
  2. przeciążasz globalny operator<<(strumien&, const klasa&)
    Opcja (1) najczęściej jest niemożliwa, bo strumień nie jest Twoją klasą, stąd wybór opcji nr 2.
0

Dzieki :)

1 użytkowników online, w tym zalogowanych: 0, gości: 1