"Мюррэй Хилл, Бьярн Страустрап. Язык С++" - читать интересную книгу автора


Достаточно интересно, что тело функции осталось без изменений, но
если вы будете осуществлять присваивание s, то будете
воздействовать на сам объект, а не на его копию. В данном случае
то, что возвращается ссылка, также повышает эффективность,
поскольку очевидный способ реализации ссылки - это указатель, а
передача указателя гораздо дешевле, чем передача большой структуры
данных.
Ссылки также существенны для определения потока ввода, поскольку
операция ввода получает в качестве операнда переменную для
считывания. Если бы ссылки не использовались, то пользователь
должен был бы явно передавать указатели в функции ввода.

class istream {
//...
int state;
public:
istream& operator>>(char&);
istream& operator>>(char*);
istream& operator>>(int&);
istream& operator>>(long&);
//...
};

Заметьте, что для чтения long и int используются разные функции,
тогда как для их печати требовалась только одна. Это вполне обычно,
и причина в том, что int может быть преобразовано в long по
стандартным правилам неявного преобразования (#с.6.6), избавляя
таким образом программиста от беспокойства по поводу написания
обеих функций ввода.

- стр 36 -

1.10 Конструкторы

Определение ostream как класса сделало члены данные закрытыми.
Только функция член имеет доступ к закрытым членам, поэтому надо
предусмотреть функцию для инициализации. Такая функция называется
конструктором и отличается тем, что имеет то же имя, что и ее
класс:

class ostream {
//...
ostream(streambuf*);
ostream(int size, char* s);
};

Здесь задано два конструктора. Один получает вышеупомянутый
streambuf для реального вывода, другой получает размер и указатель
на символ для форматирования строки. В описании необходимый для