Как понять данный кусок кода

О перегрузке операций вывода: Что конкретно непонятно?

В общих чертах:

1. так как метод объявлен как дружественный, то придется указывать имя первого операнда - потока (естественно мы не можем использовать внутренний метод для ofstream/ostream - реализации этих классов как бы закрыты для нас).

2. перегрузка возвращает ссылку на поток, который был операндом - это чтобы можно было делать вот так:

если бы метод не возвращал данного значения, или возвращал бы другой - не было бы так прикольно - нельзя было бы писать в одну строку вывод целой поэмы.

На самом деле операторы вывода всегда возвращают ссылку на поток, просто оно нам и не надо - нужно только для того, чтобы сразу в одной строке вывести такую вещь. Однако в перегрузке об этом забывать не стоит.

Вообще лучше почитать умную книжку (рекомендовал бы Страуструпа) - там это освещено более подробно и разносторонне.