Адела
При перегрузке оператора вставки потока и оператора извлечения потока вы должны знать об объекте с левой стороны, например, мы пишем cout << ”hello world”; теперь посмотрите на левый объект в этом операторе, который является cout, и этот объект не является объектом класса, который вы разрабатываете, cout - это объект класса ostream. Теперь мы можем сделать функцию функцией-членом класса в ситуации, когда левый объект оператора принадлежит к тому же классу, который мы разрабатываем.
Предположим, у меня есть класс даты, и я перегружаю оператор + для класса данных,
чтобы я мог добавить две даты,
Например, d3 = d1 + d2; где d1, d2, d3 - объекты класса даты, теперь посмотрите на оператор +, левый операнд оператора + - это d1, который является объектом класса даты, теперь это означает, что мы можем перегрузить оператор + как функцию-член класс,
посмотрите другой пример d3 = 5 + d2; теперь левый операнд равен 5, что не является объектом даты класса, поэтому мы не можем сделать эту функцию функцией-членом.
Мы должны сделать ее функцией друга.