В C ++ не требуется, чтобы возвращаемый тип являлся ссылкой на объект ostream
. Однако, если вы пытаетесь сделать что-то вроде:
cout << instance_of_custom_type << 3 << "hi" << endl;
Тогда вам понадобится:
ostream &operator << (ostream &os, custom_type &t);
Однако, если вы делали что-то вроде написания большого целочисленного типа и хотели бы поддерживать сдвиг битов, это может быть что-то вроде:
BigInt operator << (const BigInt &i, unsigned int shift);
Чтобы расширить это немного, оригинальное использование оператора <<
предназначено для сдвига битов. 1 << 8
равно 256, например. C ++ добавил (немного сбивающее с толку) второе использование для этого и перегрузил его на ostream
, что означает «вывод» в поток. Внутри перегруженного оператора вы можете делать все что угодно - он работает точно так же, как и функция, однако к операторам прилагается человеческое ожидание: в C ++ программисты ожидают, что <<
это сдвиг битов или вывод потока.