Это не имеет ничего общего с классами против структур. Это о члене против не члена.
Классы и структуры в C ++ отличаются исключительно по уровню доступности по умолчанию для членов и баз (общедоступный для структур и закрытый для классов). Кроме этого, нет никакой разницы .
При перегрузке операторов у вас почти всегда есть выбор определения оператора как члена или как автономной функции. Есть только 4 оператора, которые должны быть членами. Это: ()
, []
, ->
и =
(почему, см. этот мой вопрос ). В остальном выбор за вами.
В этой превосходной записи FAQ объясняется (среди прочего), как выбирать между участником и не членом.
Чтобы ответить на ваш основной вопрос: в случае функции-члена первый аргумент будет *this