Witam.
Po to, żeby możliwa była konstrukcja:
x = y = z;
Ale zauważ, że operator przypisania wcale nie musi zwracać referencji do obiektu:
class X
{
int i;
public:
X(int a):i(a){}
void operator=(const X &x)
{
i = x.i;
}
void print()
{
std::cout<<i<<"\n";
}
};
int main()
{
X a(5), b(4);
a.print();
b.print();
a = b;
a.print();
b.print();
}