You can only overload an assignment operator by declaring a nonstatic member function. The following example shows how you can overload the assignment operator for a particular class:
class X
{
public:
X();
X& operator=(X&);
X& operator=(int);
};
X& X::operator=(X& x) { /* ... */ }
X& X::operator=(int i) { /* ... */ }
void main()
{
X x1, x2;
x1 = x2; // call x1.operator=(x2)
x1 = 5; // call x1.operator=(5)
}
You cannot declare an overloaded assignment operator that is a nonmember function. Overloaded assignment operators are not inherited.
If a copy assignment operator function is not defined for a class, the copy assignment operator function is defined by default as a memberwise assignment of the class members. If assignment operator functions exist for base classes or class members, these operators are used when the compiler generates default copy assignment operators.