none
Перегрузка оператора вывода "<<" RRS feed

  • Вопрос

  • Здравствуйте. Пытаюсь разобраться с перегрузкой "<<", в книге даётся такая функция:

    ostream &operator<<(ostream &stream, имя_класса &obj){
    //код функции
     return stream;
    }

    Скажите пожалуйста, почему в функцию нужно передавать (и возвращать) именно ссылку на объект? Проще говоря почему нельзя так:

    ostream operator<<(ostream stream, имя_класса obj){
    //код функции
     return stream;
    }

    Спасибо.

    7 января 2015 г. 10:35

Ответы

  • Передача параметра по ссылке экономит память в стеке и ускоряет вызов функции. Ну а что касается объекта потока, вернуть нужно тот же поток, а не копию, чтобы была возможность формирования цепочки вывода. Хотя, не исключено, что конструктор копирования у потоков вообще закрыт и компилятор просто не позволит выполнить такой вызов.

    Если сообщение помогло Вам, пожалуйста, не забудьте отметить его как ответ данной темы. Удачи в программировании!

    7 января 2015 г. 11:26

Все ответы

  • Чтобы не создавались копии объектов.

    Если сообщение помогло Вам, пожалуйста, не забудьте отметить его как ответ данной темы. Удачи в программировании!

    7 января 2015 г. 10:41
  • А почему этого нельзя допускать?
    7 января 2015 г. 10:59
  • Передача параметра по ссылке экономит память в стеке и ускоряет вызов функции. Ну а что касается объекта потока, вернуть нужно тот же поток, а не копию, чтобы была возможность формирования цепочки вывода. Хотя, не исключено, что конструктор копирования у потоков вообще закрыт и компилятор просто не позволит выполнить такой вызов.

    Если сообщение помогло Вам, пожалуйста, не забудьте отметить его как ответ данной темы. Удачи в программировании!

    7 января 2015 г. 11:26