I am a bit confused about the differences between
Type operator + (const Type &type);
Type &operator += (const Type &type);
a
The friend specifier is used when the thing being declared isn't a member of the class, but needs access to the private members of the class's instances in order to do its job.
If your operator will be defined in the class itself, use the first way; if it'll be a standalone function, use the second.