Panel użytkownika
Nazwa użytkownika:
Hasło:
Nie masz jeszcze konta?

Przeładowanie operatora <<

Ostatnio zmodyfikowano 2020-02-08 08:09
Autor Wiadomość
studentAir
Temat założony przez niniejszego użytkownika
Przeładowanie operatora <<
» 2020-02-06 20:49:08
std::ostream & operator <<( std::ostream & s, const Vector & v )
{
    return s << '<' << v.x << ',' << v.y << '>';
}

Jest to kod z kursu, pokazujący właśnie przeladowanie <<. Dlaczego mamy po ostream '&' i tak samo przed s i v? I dlaczego obiekt naszej klasy musi być const?
P-176181
pekfos
» 2020-02-06 22:50:27
» Kurs C++ » Poziom 3Przekazywanie argumentów funkcji przez referencję lekcja
std::ostream musi być przez referencję, bo jest niekopiowalne. Dla typu własnego to zależy od typu, w razie wątpliwości domyślnym wyborem powinna być referencja.

I dlaczego obiekt naszej klasy musi być const?
Żeby można było przekazać stały obiekt.
P-176183
studentAir
Temat założony przez niniejszego użytkownika
» 2020-02-07 12:21:13
Czyli przeladowanie mogloby sie obyc bez referencji i flagi const dla Vectora? i czy z tego samego powodu jest referencja przed operatorem i przed s?
P-176190
pekfos
» 2020-02-07 18:01:42
Czyli przeladowanie mogloby sie obyc bez referencji i flagi const dla Vectora?
Mogłoby, co nie znaczy że powinno. Przekazywanie przez wartość powinno być rozważane tylko jeśli potrzebna jest kopia obiektu w funkcji, albo gdy obiekt jest trywialnie kopiowalny, więc nie ma negatywnych efektów wydajnościowych kopiowania (a mogą być nawet pozytywne). Rozważając wyłącznie wybór między T i const T&: int i inne typy proste przekazujemy zawsze przez wartość, obiekt zawierający w środku tylko parę prostych elementów też ujdzie. Cokolwiek większego, zarządzającego pamięcią, mającego efekty uboczne przy kopiowaniu lub w ogóle niekopiowalnego - definitywnie przez referencję. Wszędzie gdzie możliwe zachodzi oczywiście wspomniany wcześniej wyjątek, gdy programista podejmuje świadomą decyzję by przekazać element przez wartość. A więc gdy jest ku temu realny powód, a nie że nie chce mu się pisać &.

i czy z tego samego powodu jest referencja przed operatorem i przed s?
Podałem dokładny powód, dla którego std::ostream jest przekazywane i zwracane przez referencję.
P-176194
studentAir
Temat założony przez niniejszego użytkownika
» 2020-02-08 08:09:49
Dzięki wielkie
P-176195
« 1 »
  Strona 1 z 1