Поток и перегрузка оператора <<

171
14 марта 2018, 06:42

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

Answer 1
  1. Во первых ссылки подразумевают, что вы не копируете обьект лишный раз передавая его в функцию и возвращая его.

  2. Во вторых состояние потока должно быть отслеживаемо, поэтому мы должны иметь один объект входного (выходного) потока, а не копировать, тем более, что, как правильно заметил Harry, потоки не копируются.

  3. Возвращая ссылку, у нас также появляется возможность написать:

    cout << a << b << c << d ... 
    

Поскольку cout << а является ссылкой на тот же cout, ну и так далее.

READ ALSO
Вызвать Lua функцию из таблицы Lua через lua C Api

Вызвать Lua функцию из таблицы Lua через lua C Api

У меня есть следующий код на Lua:

254
Рандом ASCII C++

Рандом ASCII C++

Можно ли как то рандомить символы из ASCII C++? Если да то как? А то массивы символов не хочется вводить

230
Быстрое считывание с++

Быстрое считывание с++

Здравствуйте, нужна помощь с написанием быстрого считывания из файла с помощью getchar_unlock()В файле есть две строки не обязательно одинакового...

303
Передача параметра в поток

Передача параметра в поток

Есть классВ поток есть возможность передать параметр

257