uf u gonna declare it as external function, then u have to declre is as friend
That is not necessarily true; it depends on what the external function does. For example:
1 2 3 4 5 6 7 8 9
class MyComplexNumber
{
public:
MyComplexNumber operator+( int rhs ) const { /* ... */ }
};
// This need not be a friend since it just calls a public member of MyComplexNumber:
inline MyComplexNumber operator+( int lhs, const MyComplexNumber& rhs )
{ return rhs + lhs; }