&
в MyClass&
заставляет функцию принимать ссылку на объект MyClass, а не на сам объект.(Аналогично для остальных.)
Ссылки легки для распространения, и любое изменение, которое вы вносите в obj
, влияет на исходный объект.Без &
вы бы указали компилятору создать совершенно новый MyClass
в вызове, уничтожить его по возвращении и выбросить любые изменения, которые вы могли внести в его внутреннее состояние.
Возвращениеostream&
обычно используется для возврата того же ostream, который был передан, так что вы можете написать цепочки сдвигов вроде cout << "hello " << 42 << endl;
и заставить их вести себя так, как вы ожидаете.(Вы могли бы заставить его вернуть что-то другое - C ++ облегчает полный беспорядок с ожиданиями людей - но не делайте этого.)