Допустим, хочу перегрузить оператор << для объекта класса, тогда в заголовочном файле в теле класса объявляю функцию
friend std::ostream& operator<<(std::ostream &os, const MyVector & other); в файле с реализацей я ее, соответственно, определяю, но никак не могу понять, почему мы передаем поток по ссылке? почему возвращаем ссылку на поток, когда при определении возвращаем сам поток? И как это вообще, вернуть поток? Полагаю, такое непонимание у меня из-за того, что тема потоков до конца не ясна, буду благодарен, если кто-нибудь объяснит.
Во первых ссылки подразумевают, что вы не копируете обьект лишный раз передавая его в функцию и возвращая его.
Во вторых состояние потока должно быть отслеживаемо, поэтому мы должны иметь один объект входного (выходного) потока, а не копировать, тем более, что, как правильно заметил Harry, потоки не копируются.
Возвращая ссылку, у нас также появляется возможность написать:
cout << a << b << c << d ...
Поскольку cout << а является ссылкой на тот же cout, ну и так далее.
Апостиль в Лос-Анджелесе без лишних нервов и бумажной волокиты
Основные этапы разработки сайта для стоматологической клиники
Продвижение своими сайтами как стратегия роста и независимости