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++ <<
- это сдвиг бит или поток.
Звучит как плохо сформулированный вопрос для меня, учитель явно имел в виду это в контексте операторов потока, но не указал это явно. Перегрузка оператора не приводит к таким ограничениям, и поэтому ответ был верным, я призываю вас уведомить их о своей глупости :) – radman
@radman Я отправил письмо своему учителю по этому вопросу и дождался ответа сейчас – Earlz